Допустим, мы получили простой код, подобный этому:
// $foo and $bar aren't defined before
$foo = 5 && $bar = 15;
// var_dump()
// $foo is (bool) TRUE
// $bar is (int) 15
поэтому я предполагаю, что это работает так:
$foo = (5 && ($bar = 15))
но по моему это должно быть
$foo = ((5 && $bar) = 15) // should throw syntax error due FALSE = 15
Пожалуйста, объясните это самым простым способом (на некоторых других примерах) бедному человеку, как я. С уважением.
Я думаю, что чтение страницы руководства здесь помогает и многое проясняет.
Так как же это оценивается?
$foo = 5 && $bar = 15;
Сначала вы должны знать, что &&
имеет более высокий приоритет, чем =
, Итак, первая мысль будет такой:
$foo = (5 && $bar) = 15;
Но сейчас настал момент, когда вы должны прочитать руководство до конца: http://php.net/manual/en/language.operators.precedence.php
И цитата оттуда:
Замечания:
Хотя = имеет более низкий приоритет, чем большинство других операторов, PHP по-прежнему допускает выражения, подобные следующим: if (! $ A = foo ()), и в этом случае возвращаемое значение foo () помещается в $ a.
Что это значит?
Это молча назначить 15 $bar
например
$foo = (5 && ($bar = 15));
Теперь вы можете оценить &&
, $bar
получить назначено с 15 и 5 && 15
ИСТИНА и получить присвоить $foo
Давайте рассмотрим вашу строку кода:
$foo = 5 && $bar = 15;
Во-первых, я хотел бы отметить, что = является оператором присваивания и обычно возвращает true.
При этом, это разбивается следующим образом:
$foo = (5 && ($bar = 15))
$foo = (5 && (true))
$foo = ( (true) && (true) )
$foo = (true)
$foo = true
&& обозначает AND и сравнивает два логических значения, возвращая true, если оба имеют значение true, и false, если иначе. Обратите внимание, что присвоение $ bar = 15 вернет true, а в случае 5 ненулевые целые числа также вернут true.