这不完全是一个“问题”,而是一个“为什么”的问题。
基于以下示例:
echo 'test' . ( true ? : 'some-test' );
为什么会出现这样的结果:test1
而不是人们所期望的:test
。
或者换句话说:为什么是一个空的 return 语句1
(或实际上true
)而不是null
?
这不完全是一个“问题”,而是一个“为什么”的问题。
基于以下示例:
echo 'test' . ( true ? : 'some-test' );
为什么会出现这样的结果:test1
而不是人们所期望的:test
。
或者换句话说:为什么是一个空的 return 语句1
(或实际上true
)而不是null
?
从 PHP 5.3开始,三元运算符的中间部分?:
可以省略。
foo ?: bar
相当于foo ? foo : bar
。所以true ?: ...
总是返回第一个true
。
foo ? : bar
“如果为真则什么都没有”的意思是并且总是无效的,因为这个表达式必须返回一些东西,它不能只是什么都不返回。如果有的话,你会想要这个:foo ? null : bar
.
这是因为 PHP 5.3
“从 PHP 5.3 开始,可以省略三元运算符的中间部分。如果计算结果为 ,则表达式expr1 ?: expr3
返回,否则返回。”expr1
expr1
TRUE
expr3
有一些额外的空格,但该语法通常称为elvis 运算符。
考虑以下:
$result = ($this ?: $that);
$result
$this
如果是真的,就会$this
是,否则就是$that
。
因此,当做相当于:
echo (true ?: 'some-test');
结果总是:
echo true;
或字符串“1”。
请注意:
$var = (true ? : 'some-test');
不等于:
$var = (true ? null : 'some-test');
只有在后一个示例中才会$var
为 null,因为它是标准的三元 if 语句;第一个陈述是一个巨大的猫王操作员。
var_dump(true ? : 'some-test');
是bool(true)
var_dump('test' . true);
是string(5) "test1"
我希望这部分很清楚。这里的策略是true ? : 'some-test'
计算为true
. 这是 PHP 5.3 中引入的一种新行为,如果省略中间表达式,true
则返回第一个表达式(在您的情况下)的值。