1

这不完全是一个“问题”,而是一个“为什么”的问题。

基于以下示例:

echo 'test' . ( true ?  : 'some-test' );

为什么会出现这样的结果:test1而不是人们所期望的:test

或者换句话说:为什么是一个空的 return 语句1(或实际上true)而不是null

4

4 回答 4

8

从 PHP 5.3开始,三元运算符的中间部分?:可以省略。
foo ?: bar相当于foo ? foo : bar。所以true ?: ...总是返回第一个true

foo ? : bar“如果为真则什么都没有”的意思是并且总是无效的,因为这个表达式必须返回一些东西,它不能只是什么都不返回。如果有的话,你会想要这个:foo ? null : bar.

于 2014-04-28T13:09:10.253 回答
4

这是因为 PHP 5.3

“从 PHP 5.3 开始,可以省略三元运算符的中间部分。如果计算结果为 ,则表达式expr1 ?: expr3返回,否则返回。”expr1expr1TRUEexpr3

三元运算符

于 2014-04-28T13:09:11.923 回答
1

猫王运营商

有一些额外的空格,但该语法通常称为elvis 运算符

考虑以下:

$result = ($this ?: $that);

$result$this如果是真的,就会$this是,否则就是$that

因此,当做相当于:

echo (true ?: 'some-test');

结果总是

echo true;

或字符串“1”。

空格不等于 null

请注意:

$var = (true ?      : 'some-test');

等于

$var = (true ? null : 'some-test');

只有在后一个示例中才会$var为 null,因为它是标准的三元 if 语句;第一个陈述是一个巨大的猫王操作员。

于 2014-04-28T13:12:53.697 回答
0

var_dump(true ? : 'some-test');bool(true)

var_dump('test' . true);string(5) "test1"

我希望这部分很清楚。这里的策略是true ? : 'some-test'计算为true. 这是 PHP 5.3 中引入的一种新行为,如果省略中间表达式,true则返回第一个表达式(在您的情况下)的值。

于 2014-04-28T13:10:16.673 回答