我有一个Callback
函数,第二个参数是Array
。
所以,我有类似的东西:
public function foo ($something, $callback) {
/**
* function body
*/
$booleanOrArray = $this->bar();
if ( is_callable ( $callback ) ) {
return call_user_func ( $callback, !is_array($booleanOrArray), $booleanOrArray || [ ]);
}
throw new Exception('A callback function must be defined.');
}
因此,在call_user_func
中,有一个名为$booleanOrArray
的var。这是因为,如果函数bar
的procces做得好,那么,返回带有数据的Array
,否则,bar函数返回false
;所以,如果bar
返回false
,则callback
函数中的第一个参数由is_array($booleanOrArray)
确定,因此,如果foo返回false
,则会出错,如果是Array
,则此参数将为false
。
但是,在我的应用中,我强制用户定义callback
函数,如下所示:
$MyClass = new ClassInstance();
$MyClass->foo('firstParam', function ( $error, Array $data ) {
if ( ! $error ) {
var_dump($data);
}
else {
print 'Hey!';
}
});
但是,在所有这些代码之后,我很惊讶地发现$booleanOrArray || [ ]
总是返回false
。
在Javascript中,如果我代码为var x = foo || bar;
,如果foo
为null
,false
或undefined
,则x
会有bar
值,反之亦然。
所以,问题是:
这可能在php中,或者我必须做$x = ($booleanOrArray) ? $booleanOrArray : [ ]
之类的事情吗?
在这种情况下,你有什么想法改进回调功能吗? (不是基于意见,只有标准)
答案 0 :(得分:4)
类似于
$x = ($booleanOrArray) ? $booleanOrArray : [ ]
?
是的,您甚至可以使用缩短的三元语法:
$booleanOrArray ?: []
如果它不是假的则为$booleanOrArray
,否则会产生空数。