Сколько пишу на 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей