Сколько пишу на php
ни разу isset
не пригодился. Я проверял даже - если в массиве нет ключа, но ты пытаешься его получить то возвращает null
без ошибок (по мне так лучше бы исключение кидал как в других языках). В то же время isset
вернет false
и если ключ есть, но значение по этому ключу null
, поэтому уж лучше тогда проверять array_key_exists
. Так вот isset
реально бесполезен?! Или есть какой-то толк?
P.S. Вопрос больше про применение isset
с массивами. Ну наверное его можно применять для проверки существования переменной, хотя и то проще на null проверить с тем же успехом по моему. К тому же IDE обычно подсказывает если пытаешься использовать не инициализированную переменную.
Конечно есть, у вас скорее всего выключены Notice ошибки, и на самом деле у вас очень в многих местах.
Вообще проверять на наличие чего либо, стоит всегда. Вы конечно в чем то правы про null / false / array_key_exists. Но лучше всегда проверять. Ключом массива может переменная которой может быть. Или же может не быть входных параметров при запросе к базе данных, добавив isset вы только облегчите себе в дальнейшем читаемость и предсказуемость кода. Без банальных проверок, вы когда-нибудь при переезде на новый сервер можете быть сильно удивлены сколько все таки ошибок у вас.
Наиболее частый кейс использования isset
- проверка входных данных. Так как PHP, фактически, является языком обрабатывающим пользовательские запросы - этот кейс как никогда актуален.
@lazyproger совершенно верно акцентировал внимание на проверках $_GET
и $_POST
, от которых никуда не деться в любом проекте чуть сложнее landing page.
Касательно массивов - isset
часто бывает полезен при валидации массивов, полученных посредством json_decode
из json-ответа стороннего API например. В общем случае он будет работать быстрее, чем array_key_exists
(на копейки правда, но все же), но с нюансом относительно NULL - это да. С другой стороны, полученный в ответ NULL зачастую, для логики приложения, равносилен отсутствию значения.
UPD немного кишок про isset и array_key_exists
$a=[];
isset($a['a']);
компилируется в
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > EXT_STMT
1 ASSIGN !0, <array>
4 2 EXT_STMT
3 ISSET_ISEMPTY_DIM_OBJ 33554432 ~2 !0, 'a'
4 FREE ~2
6 5 > RETURN 1
А это
$a=[];
array_key_exists('a', $a);
в
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > EXT_STMT
1 ASSIGN !0, <array>
4 2 EXT_STMT
3 INIT_FCALL 'array_key_exists'
4 EXT_FCALL_BEGIN
5 SEND_VAL 'a'
6 SEND_VAR !0
7 DO_FCALL 0
8 EXT_FCALL_END
6 9 > RETURN 1
Как мы видим, в первом случае на все про все один опкод ISSET_ISEMPTY_DIM_OBJ
, во втором случае вызов подпрограммы с передачей туда сюда переменных и значений
Вопрос больше про применение isset с массивами
Используйте для работы с массивами соответствующие функции.
isset() вам поможет определить, была ли установлена переменная значением, отличным от NULL
. Эта конструкция так же бывает удобна для проверки нескольких переменных в одном выражении, например:
$a = 1;
$b = 1;
$c = null;
$d = 1;
$e = 1;
var_dump( isset($a, $b, $c, $d, $e) ); // boolean false
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
При отправке изображения приходит и hash и photoНо при сохранении пишет ошибка 129 файл не найден
Привет!Я начал изучать то как работают поисковые роботы яндекса и мне по заданию нужно сделать проверку на наличие директивы Host в файле robotstxt