Вот список тестов (все с ошибками, включая выражения):
php > isset(1); // integer
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
php > isset('string'); // string
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
php > isset(null); // null
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
php > isset(['q']); // array
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
php > isset(1==1); // expression
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
php > isset("null !== expression")
php > ;
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
но при тестировании с пустым:
empty(1); // integer
empty('string'); // string
empty(null); // null
empty(['q']); // array
empty(1==1); // expression
empty("null !== expression");
ошибок нет .. я в курсе предупреждения в мануале
Warning
isset() only works with variables as passing anything else will result in a parse error. For checking if constants are set use the defined() function.
Но все равно хотелось бы знать, почему .. почему это так?
isset () проверяет, была ли объявлена переменная. empty () проверяет, пуста ли переменная.
Джозеф Сибл: Да, но разве это не должно возвращать false для согласованности с другими встроенными функциями? Я нахожу это довольно странным
Это не функция, а языковая конструкция, которая просто выглядит как функция.
Придется запросить на сайте php.net






[Решено] Это будет исправлено в грядущем патче php7.
Какой смысл спрашивать, было ли установлено значение для чего-то, не являющегося переменной?