较新的PHP三元运算符具有isset函数的不良结果

时间:2011-12-20 02:38:09

标签: php

我遇到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()方法设置它时,它将返回true1而不是值。

我是否必须使用较旧的较长方法才能使$route等于$test的值而不是布尔值1

2 个答案:

答案 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);否则它返回第二个操作数。