[英]Newer style PHP ternary operator has undesired result with isset function
我遇到PHP的三元运算符问题,因为PHP版本5.3你可以用更短的版本替换速记三元运算符
// Older version
$route = isset($test) ? $test : 'test is NOT set';
// Newer version as of 5.3
$route = isset($test) ?: 'test is NOT set';
现在在较新的版本上,如果没有设置$test
。 它工作正常。 但是,当由于isset()
方法设置它时,它返回true
或1
而不是值。
我是否必须使用较旧的较长方法来使$route
等于$test
的值而不是布尔值1
?
你必须使用更长的版本。
引用文档 :
表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
因此,简写版本的正确行为是返回评估isset($test)
。 不是你想要的$test
。
从PHP 7开始,您可以使用null合并运算符 :
$route = $test ?? 'test is NOT set';
这相当于
$route = isset($test) ? $test : 'test is NOT set';
在这里你可以找到一些细节:
对于需要将三元组与
isset()
结合使用的常见情况,已添加空合并运算符(??
)作为语法糖。 它返回第一个操作数(如果存在且不为NULL); 否则返回第二个操作数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.