【发布时间】:2014-01-06 00:04:17
【问题描述】:
我有一个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 的变量。这是因为,如果函数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 : [ ]的操作?在这种情况下你有什么改进回调函数的想法吗? (不是基于意见,只有标准)
【问题讨论】:
-
建议:可以使用
callable类型提示,而不是手动强制执行并抛出异常。 -
在我的真实应用程序中,我通过 func_get_args() 动态获取函数参数,但这是一个很好的数据,谢谢!
-
你可以使用这样的东西:
$x = true or $x = []; var_dump($x);和$x = false or $x = []; var_dump($x);但@dev-null-dweller 建议的短三元运算符似乎更好。
标签: php variable-assignment boolean-expression