Как это & ​​quot; $ foo = 5 & amp; & amp; $ bar = 15 & quot; оценил, а почему не ошибка?

Допустим, мы получили простой код, подобный этому:

// $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
  1. Форма оценки слева направо [$ foo want 5 но && выше]
  2. && получил самый высокий приоритет [так && занимает 5 и $ бар]
    • 5 == ИСТИНА; $ bar == Не определено [поэтому это NULL == FALSE]
  3. = получил правильную ассоциативность [ожидает оценки (5 && $ Бар)]

Пожалуйста, объясните это самым простым способом (на некоторых других примерах) бедному человеку, как я. С уважением.

4

Решение

Я думаю, что чтение страницы руководства здесь помогает и многое проясняет.

Так как же это оценивается?

$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

3

Другие решения

Давайте рассмотрим вашу строку кода:

 $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.

0

По вопросам рекламы [email protected]