我遇到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
?
答案 0 :(得分:9)
您必须使用较长的版本。
引用docs:
Expression expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
因此,简写版本的正确行为是返回评估isset($test)
的结果。不是你想要的$test
。
答案 1 :(得分:1)
从 PHP 7 开始,您可以使用 null合并运算符:
$route = $test ?? 'test is NOT set';
相当于
$route = isset($test) ? $test : 'test is NOT set';
Here你可以找到一些细节:
对于需要与
??
一起使用三元数的常见情况,已添加空合并运算符(isset()
)作为语法糖。它返回第一个操作数(如果存在且不为NULL);否则它返回第二个操作数。