Методы isset, empty и is_null, в общем, интуитивно понятны. isset проверяет на существование, empty на «пустое» значение, а is_null, как это понятно из названия, проверяет значение на null, но во-первых, эти функции отчасти пересекаются в функционале, а во-вторых, их результата не всегда интуитивно понятен. В PHP 7.0 появился еще и оператор ??, который проверяет на существование и null одновременно. Здесь я составил шпаргалку по их использованию (наиболее неочевидные вещи выделены жирным):
Значение$val | isset($val) | empty($val) | is_null($val) | $val=$val??’default’ |
0, false, array(), «0», «», 0.0 | true | true | false | исходное значение |
null | false | true | true | ‘default’ |
var $val; — переменная объявлена, но не проинициализирована | false | true | true | ‘default’ |
1, true, «a», » » (пробел), 1.0, «\ 0” (байтовый Null) | true | false | false | исходное значение |