array_key_exists и ??в php 7.x - PullRequest
       0

array_key_exists и ??в php 7.x

0 голосов
/ 05 октября 2018

Этот код работает в PHP 7.x

$array = ['asda' => ['asdasd']];
$var = $array['asda']['asdasd'] ?? "yes!";
echo $var;

Если мы заменим ?? на ?:, как это было в более старой версии PHP, этот код не будет работать, например:

$array = ['asda' => ['asdasd']];
$var = $array['asda']['asdasd'] ? $array['asda']['asdasd'] : "yes!";
echo $var;

Это означает, что мы получим ошибку вроде: Notice</b>: Undefined index: asdasd in <b>[...][...]</b> on line

Итак, можем ли мы использовать первый пример в PHP 7.x, не боясь ничего странного / неожиданного in behind?Я имею в виду, это безопасно использовать вместо этого, например, array_key_exists или isset

1 Ответ

0 голосов
/ 05 октября 2018

Используйте isset(), чтобы проверить, существует ли элемент.

$var = isset($array['asda']['asdasd']) ? $array['asda']['asdasd'] : "yes!";

Старый условный оператор :? является простым if/then/else - он проверяет правильность первого выражения, а затем возвращаетили второе или третье выражение в зависимости от этого.Тестовое выражение выполняется нормально, поэтому, если оно содержит неопределенные переменные, индексы или свойства, вы получите обычное предупреждение об этом.

Новый оператор ?? null-coalescing, с другой стороны, тестируетопределено ли первое выражение, а не NULL, а не просто верно ли оно.Поскольку он самостоятельно проверяет, определено ли выражение, он не выдает предупреждения, если это не так.Он специально предназначен для замены условного isset().

См. Тернарный оператор PHP против оператора объединения нулей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...