返回值取决于某些var的布尔值

时间:2014-01-06 00:04:17

标签: php variable-assignment boolean-expression

我有一个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;,如果foonullfalseundefined,则x会有bar值,反之亦然。

所以,问题是:

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

  • 在这种情况下,你有什么想法改进回调功能吗? (不是基于意见,只有标准)

1 个答案:

答案 0 :(得分:4)

  

类似于$x = ($booleanOrArray) ? $booleanOrArray : [ ]

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

$booleanOrArray ?: []

如果它不是假的则为$booleanOrArray,否则会产生空数。