返回语句简写语法


Return statement shorthand syntax

我是新的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