为何PHP的isset函数与empty等其他函数表现不一致?
isset()直接处理表达式报错的问题 你碰到的这些报错都是因为**isset()函数的设计限制**——它只能用来检查变量是否存在且不为null,绝对不能直接作用于表达式(像字面量、计算结果这类都属于表达式范畴)。PHP官方早就明确了这个规则,所以当你直接把整数、字符串、null这类表达式传给isset()时,必然会触发致命错误。
具体报错案例汇总:
传入整数字面量时:
php > isset(1); // 整数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'); // 字符串Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in php shell code on line 1
传入
null值时:php > isset(null); // null值Fatal error: Cannot use isset() on the result of an expression (建议使用"null !== expression"替代) in php shell code on line 1
快速解决方法:
正如报错提示里给出的方案,如果你要判断一个表达式是否不为null,直接用null !== 表达式的写法替代isset()就可以了。比如:
- 替代
isset(1):用null !== 1 - 替代
isset('string'):用null !== 'string' - 替代
isset(null):用null !== null(这个结果是false,和isset(null)的预期效果完全一致)
额外提一句:isset()的核心场景是检查变量的存在性,如果你本来就不是要检查变量,只是判断某个值是否非null,用null !==的写法其实更贴合你的实际需求。
内容的提问来源于stack exchange,提问作者PauAI

