繁体   English   中英

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

[英]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()方法设置它时,它返回true1而不是值。

我是否必须使用较旧的较长方法来使$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM