返回语句的简写语法

时间:2014-03-24 15:14:30

标签: php return

我是php开发的新手,但到目前为止我已经能够做任何我想做的事了。我最近遇到了一种编写return语句的奇怪语法:

public static function return_taxonomy_field_value( $value )
{ 
   return (! empty(self::$settings['tax_value']) ) ? self::$settings['tax_value'] : $value;
}

我得到了return()!empty(),但之后它有一个?以及我迷路的地方。任何帮助深表感谢!谢谢你们

3 个答案:

答案 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