在 PHP 手册中,我发现以下“用户贡献的注释”在“操作员”下。
请注意,在 php 中,三元运算符 ?: 具有左结合性,这与 C 和 C++ 中的右结合性不同。
您不能编写这样的代码(正如您可能在 C/C++ 中习惯的那样):
<?php
$a = 2;
echo (
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 4 ? 'four' : 'other');
echo "\n";
// prints 'four'
我实际尝试了一下,确实打印出来了four
。但是我无法理解其背后的原因,但仍然觉得它应该打印two
or other
.
有人可以解释一下这里发生了什么以及为什么打印“四”吗?
在任何理智的语言中,三元运算符都是右结合的,这样你就可以expect您的代码将被解释为这样:
$a = 2;
echo ($a == 1 ? 'one' :
($a == 2 ? 'two' :
($a == 3 ? 'three' :
($a == 4 ? 'four' : 'other')))); # prints 'two'
然而,PHP 三元运算符是奇怪的左关联,因此您的代码实际上相当于:
<?php
$a = 2;
echo (((($a == 1 ? 'one' :
$a == 2) ? 'two' :
$a == 3) ? 'three' :
$a == 4) ? 'four' : 'other'); # prints 'four'
如果还不清楚,评估如下:
echo ((((FALSE ? 'one' :
TRUE) ? 'two' :
$a == 3) ? 'three' :
$a == 4) ? 'four' : 'other');
echo ((( TRUE ? 'two' :
$a == 3) ? 'three' :
$a == 4) ? 'four' : 'other');
echo (( 'two' ? 'three' :
$a == 4) ? 'four' : 'other');
echo ( 'three' ? 'four' : 'other');
echo 'four';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)