将PHP7应用回迁至PHP5.4时遇Unexpected ')'语法错误求助
为什么PHP5.4会报这个语法错误?
嘿,这个问题我太熟了!当年PHP5.4刚发布时,empty()的语法更新可是不少开发者的“坑点”,正好对应你现在遇到的问题。
错误成因
在PHP 5.4之前,empty()是一个语言结构(不是普通函数),它的参数有严格限制:只能接受变量,不能直接传入常量、函数调用或者任何表达式。
你写的if (!empty(MY_CONSTANT))在PHP7里没问题,因为PHP5.4及以后放宽了限制,允许empty()处理任意表达式。但回到PHP5.4,语法解析器会误解你的代码:它看到MY_CONSTANT后,会误以为你要调用类常量(比如ClassName::CONSTANT的写法),所以它在等待::符号,结果却看到了闭合的),于是就抛出了那个syntax error, unexpected ')', expecting ::的错误。
解决办法
有两种简单的方式修复这个问题:
方案1:把常量赋值给变量再检查
这是最稳妥的方式,完全符合PHP5.4的语法要求:$temp_var = MY_CONSTANT; if (!empty($temp_var)) { // 你的业务逻辑代码 }方案2:直接判断常量值(结合存在性检查)
如果你的常量是确定存在的,或者需要先判断是否存在,可以直接用常量本身做逻辑判断:// 常量确定存在时 if (MY_CONSTANT) { // 逻辑代码 } // 不确定常量是否存在时,先检查定义 if (defined('MY_CONSTANT') && MY_CONSTANT) { // 逻辑代码 }这里要注意:
if (MY_CONSTANT)和!empty(MY_CONSTANT)的逻辑是等价的——都会把false、0、''、null这些“空值”判定为假。
内容的提问来源于stack exchange,提问作者spice
相关产品推荐
相关产品推荐

