我是php开发的新手,但到目前为止我已经能够做任何我想做的事了。我最近遇到了一种编写return语句的奇怪语法:
public static function return_taxonomy_field_value( $value )
{
return (! empty(self::$settings['tax_value']) ) ? self::$settings['tax_value'] : $value;
}
我得到了return()
和!empty()
,但之后它有一个?
以及我迷路的地方。任何帮助深表感谢!谢谢你们
答案 0 :(得分:3)
这是一个三元运算符,是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;
}
您可以找到更多信息here,以及使用三元运算符时的一些提示。
由于该问题被标记为与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 )
▲ ▲ ▲ ▲
| | | |
\ \_____________________________/ /
\_______________________________________/
答案 1 :(得分:0)
这称为三元运算符 - 看看here
这基本上转化为[声明]? [true execution path]:[false execution path]
在您的情况下,这将执行以下操作:
if(! empty(self::$settings['tax_value']) )
return self::$settings['tax_value'];
else
return $value;
答案 2 :(得分:0)
这是一个简写if语句。请考虑以下代码
$Test = true ? 1 : 3;
// test is 1
$Test = false ? 1 : 3;
// test is 3