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

What does @$a or $a = ... mean in PHP?

我在 PHP 的 TwitterOAuth 库中看到了这段代码:

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

这里的运算符 or 是什么意思?

仅当左侧为 "falsy" 值时,or 才计算右侧 ($parameters = array())。

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

Set $parameters to array() unless $parameters is already set

@or 无关。那就是错误抑制运算符。在这种情况下,它允许您测试 $parameters,即使 $parameters 尚未分配给。通常这会导致错误,因为当您尝试从尚未分配给的变量中读取时,打开错误报告是一个非常普遍接受的 best-practice

这是 shorthand

if( empty($parameters) ) {
    $parameters = array();
}

如果未设置 $parameters,表达式 $parameters 的第一部分将输出一条通知并评估为 false。 @ 符号禁止显示该通知。请注意,由于 $parameters 是函数参数之一,它将始终被设置,因此不需要错误抑制。表达式的第二部分仅在第一部分的计算结果为 false 时执行。

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

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

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

附带说明一下,我认为表达能力比聪明更好。您发布的代码只需要最少的输入,但即使您了解正在发生的事情,也可能需要更长的时间才能掌握。