我是新的php开发,但到目前为止已经能够做任何我想要的。我最近遇到了写return语句的一种奇怪的语法:
public static function return_taxonomy_field_value( $value )
{
return (! empty(self::$settings['tax_value']) ) ? self::$settings['tax_value'] : $value;
}
我得到了return()
和!empty()
,但在那之后它有一个?
,这就是我迷路的地方。任何帮助都非常感激!由于人
这是一个三元运算符,if
语句的简短版本。
:
$a = $test ? $b : $c;
等于:
if($test)
{
$a=$b;
}
else
{
$a=$c;
}
所以基本上你的例子相当于:
if(! empty(self::$settings['tax_value'])
{
return self::$settings['tax_value'];
}
else
{
return $value;
}
您可以在这里找到更多信息,以及使用三元操作符时的一些注意事项。
与其他语言的重要区别
由于这个问题被标记为另一个在Objective-C中处理三元运算符的问题的副本,我觉得这个差异需要解决。
PHP中的三元运算符与C语言(以及据我所知的所有其他语言)中的三元运算符具有不同的结合性。为了说明这一点,请考虑以下示例:
$val = "B";
$choice = ( ($val == "A") ? 1 : ($val == "B") ? 2 : ($val == "C") ? 3 : 0 );
echo $choice;
这段代码(在PHP中)的结果将是3
,尽管看起来2
应该是正确的答案。这是由于奇怪的结合性实现威胁到上面的表达式:
( ( ( ($val=="A") ? 1 : ($val=="B") ) ? 2 : ) ($val=="C") ? 3 : 0 )
▲ ▲ ▲ ▲
| | | |
' '_____________________________/ /
'_______________________________________/
这就是所谓的三元运算符——请看这里
这基本上翻译成[statement] ?[true执行路径]:[false执行路径]
在您的示例中,它将执行以下操作:
if(! empty(self::$settings['tax_value']) )
return self::$settings['tax_value'];
else
return $value;
这是一个简短的if语句。考虑下面的代码
$Test = true ? 1 : 3;
// test is 1
$Test = false ? 1 : 3;
// test is 3