Приоритет оператора && и? - PullRequest
       18

Приоритет оператора && и?

1 голос
/ 09 ноября 2019

Я читаю https://www.php.net/manual/en/language.operators.precedence.php, что && связывает сильнее, чем ?? ?

Почему, черт возьми, конструкция, предназначенная для предоставления «значения по умолчанию» необязательного элемента массива, не очень тесно связана с этим элементом?

$ok = $ok && $someArray['optionalElement'] ?? true;      // Wrong
$ok = $ok && ( $someArray['optionalElement'] ?? true );  // Right

1 Ответ

0 голосов
/ 09 ноября 2019

Из документов PHP

https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

Нулевой оператор объединения (??) был добавлен как синтаксический сахар для общего случая необходимости использования троичного вв сочетании с isset (). Возвращает свой первый операнд, если он существует и не равен NULL;в противном случае он возвращает свой второй операнд.

Исходя из этого, нулевой coalescor обрабатывает все, что осталось, как аргумент выражения для isset()

Так что $ok && $someArray['optionalElement'] принимается как полноеexpression.

Обтекание ( $someArray['optionalElement'] ?? true ) в скобках приводит к тому, что только $someArray['optionalElement'] будет выражением, и оно будет работать так, как вы ожидаете.

...