Зная различия array_key_exists()
и isset()
в PHP, я вижу много сторонников в Интернете, предлагающих заменить array_key_exists()
на isset()
, но я думаю, что безопасно для этого?
В одном проекте у меня есть значение $ var, предоставленное пользователями.Значение может быть любым, даже NULL или не задано вообще.Я хочу использовать !empty($var)
, чтобы проверить, содержит ли $var
непустое значение, но я понимаю, что использование только !empty($var)
опасно, поскольку, если $var
не задано заранее, PHP выдаст ошибку.
Итак, у меня есть isset($var) && !empty($var)
для проверки, содержит ли $var
непустое значение.
Однако все становится сложнее, когда у меня есть значение, хранящееся в массиве ассоциаций.Сравните следующее, предполагая, что массив $arr
всегда существует, но ключ foo
может существовать или не существовать в $arr
.
// code snipplet 1
$arr = array();
echo isset($arr['foo']);
// code snipplet 2
$arr = array();
echo array_key_exists('foo', $arr) && !is_null($arr['foo']);
Фрагмент кода 2 всегда будет работать, но онкажется неуклюжим и труднее читать.Что касается фрагмента кода 1 , у меня был плохой опыт ... Я писал что-то подобное раньше в машине для разработки.Он работал нормально, но когда я развернул код на рабочей машине, он выдавал ошибки просто потому, что в массиве не было ключа.После некоторой отладки я обнаружил, что конфиги PHP отличались между разработкой и производственными машинами, и их версии PHP немного отличались.
Итак, я думаю, действительно ли безопасно просто заменить array_key_exists()
на isset()
?Если нет, то что может быть лучше альтернативы фрагмент кода 2 ?