PHP中的@ $ a或$ an = ...是什么意思?

时间:2015-01-05 01:06:36

标签: php operators

我在Twitter的这个代码中看到了PHP的PHP库:

function __construct($http_method, $http_url, $parameters=NULL) {
    @$parameters or $parameters = array();
    //...
}

在这种情况下,运营商或意味着什么?

2 个答案:

答案 0 :(得分:1)

or仅在左侧为" falsy"时评估右侧($parameters = array())。值。

在这种情况下,可以阅读:

  

$parameters设置为array(),除非已设置$parameters

@or无关。那是误差抑制算子。在这种情况下,即使尚未分配$parameters,也可以测试$parameters。通常这会导致错误,因为当您尝试从尚未分配的变量中读取错误时,它会非常普遍地接受best-practice

答案 1 :(得分:1)

这是

的简写
if( empty($parameters) ) {
    $parameters = array();
}

如果未设置$ parameters,表达式$parameters的第一部分将输出通知并评估为false。 @符号抑制了这个通知。请注意,由于$ parameters是函数参数之一,因此总是会设置它,因此不需要进行错误抑制。表达式的第二部分仅在第一部分求值为false时执行。

更一般地说,当确定包含和(在顶层)的布尔表达式的值时,PHP将在找到真值后停止评估。

例如,将始终输入以下if语句,并且永远不会评估表达式的第二部分:

if( true || $anything ) {
     //will always be executed
}

作为旁注,我认为表达而不是聪明更好。您发布的代码需要最少的输入,但即使您了解发生了什么,也可能需要更长时间才能掌握。