我有一个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
中,有一个var,叫做$booleanOrArray
。这是因为,如果函数bar
的过程做得很好,那么,返回一个带有数据的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 : [ ]
的事情?在这种情况下,你有什么改进回调函数的想法吗(不基于意见,仅基于标准)
类似
$x = ($booleanOrArray) ? $booleanOrArray : [ ]
的东西?。
是的,您甚至可以使用缩短的三元语法:
$booleanOrArray ?: []
这将导致$booleanOrArray
,如果它不是伪数组或空数组。