返回值取决于某个变量的布尔值



我有一个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;进行编码,如果foonullfalseundefined,则x将具有bar值,反之亦然。

所以,问题是:

  • 这在php中可能吗,或者我必须做一些类似$x = ($booleanOrArray) ? $booleanOrArray : [ ]的事情?

  • 在这种情况下,你有什么改进回调函数的想法吗(不基于意见,仅基于标准)

类似$x = ($booleanOrArray) ? $booleanOrArray : [ ]的东西?。

是的,您甚至可以使用缩短的三元语法:

$booleanOrArray ?: []

这将导致$booleanOrArray,如果它不是伪数组或空数组。

最新更新