Подтвердить что ты не робот

Синтаксис синтаксиса PHP с условным оператором "?:" И "ИЛИ"

Сегодня я был откровенен:

$asdf = ((1 OR true) ? "asdf" : "fdsa");
var_dump($asdf); // print "asdf"

$asdf = (1 OR true) ? "asdf" : "fdsa";
var_dump($asdf); // print "asdf"

$asdf = (1 OR true ? "asdf" : "fdsa");
var_dump($asdf); // print true

$asdf = 1 OR true ? "asdf" : "fdsa";
var_dump($asdf); // print 1

Хорошо, последнее меня не удивляет, а третье? Может кто-нибудь объяснить?

4b9b3361

Ответ 1

Это все о приоритете операторов и их ассоциативности

http://php.net/manual/en/language.operators.precedence.php

or имеет более низкую точность, чем =, поэтому он будет выполнен первым

so $asdf = 1 OR true ? "asdf" : "fdsa";

будет выглядеть как

($asdf = 1) or true ? :"asdf" : "fdsa", поэтому он будет печатать 1.

$a or $b проверьте, является ли $a или $b истинным, если $a истинно, тогда оно возвращается и даже не проверяет $b

В третьем случае

$asdf = (1 OR true ? "asdf" : "fdsa");

() имеет более высокий приоритет, чем =, поэтому он будет выполнен до назначения.

Чтобы доказать это

измените ИЛИ на ||, у которого более высокая точность, чем =

$asdf = 1 || true ? "asdf" : "fdsa";

var_dump($asdf); // print asdf

Ответ 2

Здесь:

// use () - result in brackets assigned to $asdf
$asdf = (1 OR true ? "asdf" : "fdsa");
var_dump($asdf); // print true

И здесь:

// = has higher precedence so $asfd equals 1 
// and it doesn't matter what is the result of ternary operator
$asdf = 1 OR true ? "asdf" : "fdsa";
// line equals to 
($asdf = 1) OR (true ? "asdf" : "fdsa");
// so $asdf is always 1 here
var_dump($asdf); // print 1

Ответ 3

$asdf = (1 ИЛИ true? "asdf" : "fdsa" );

Он равен (1 OR (true ? "asdf" : "fdsa"));

И он равен (1 OR "asdf");

И это равно true;

1 ИЛИ "asdf" не равно (1 ИЛИ "asdf" ). Если вы не используете скобки, оператор после оператора OR больше не важен. Вы назначили первый элемент как значение. Но если вы используете скобки, первым элементом будет оператор в скобках