Например, присвоение переменной в операторе if

Я немного запутался по поводу приоритета операторов.

Вот пример, который не совпадает с официальный сайт php

 function getValue($key) {
$array = ['un' => 1, 'six' => 6];

if (array_key_exists($key, $array)) {
return $array[$key];
}

return null;
}

var_dump(null === $t1=getValue('un'));
var_dump(null === $t2=getValue('blablablaaaaaa'));
// And now I switch
var_dump($t3=getValue('un') ===  null);
var_dump($t4=getValue('blablablaaaaaa') === null);

ВЫХОД

 bool(false)
bool(true)
// After the switch
bool(false)
bool(true)

Это не то, что я ожидал для двух первых выходов, потому что сравнение имеет более высокий приоритет, чем назначение. Так что PHP должен был попытаться сравнить null === $t1, или же $t1 еще не было объявлено, поэтому должно быть выдано предупреждение или ошибка или что-то еще. Или этого не произошло. Вы замечаете, что PHP иногда обрабатывает присваивание перед сравнением, хотя сравнение имеет более высокий приоритет и поэтому всегда должно выполняться перед присваиванием?. Любые объяснения по этому поводу?

Мой второй вопрос: следует ли этого избегать, всегда разделяя такого рода выражения?

ОБНОВИТЬ

N.B

 var_dump($t1, $t2, $t3, $t4);
// OUTPUT

int(1)
NULL
// After the switch
bool(false)
bool(true)

3

Решение

=== является неассоциативным.

Неассоциативные операторы операторы, которые не имеют определенного поведения при использовании в выражении в последовательности.

И в документы

= имеет более низкий приоритет, чем большинство других операторов, PHP по-прежнему разрешает выражения, подобные следующим: if (! $ a = foo ()), и в этом случае возвращаемое значение foo () помещается в $ a.

Так что можно предположить PHP (в любом из выражений) сначала присваивает значение, возвращаемое функцией, переменной, а затем сравнивает.

2

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

Других решений пока нет …

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