我在Twitter的这个代码中看到了PHP的PHP库:
function __construct($http_method, $http_url, $parameters=NULL) {
@$parameters or $parameters = array();
//...
}
在这种情况下,运营商或意味着什么?
答案 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
}
作为旁注,我认为表达而不是聪明更好。您发布的代码需要最少的输入,但即使您了解发生了什么,也可能需要更长时间才能掌握。