【问题标题】:Return value depending the boolean value of some var返回值取决于某个 var 的布尔值
【发布时间】: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;,如果foonull,或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


【解决方案1】:

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

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

$booleanOrArray ?: []

如果它不是 falsy 或空数组,则返回 $booleanOrArray

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2013-06-28
    • 2011-10-09
    • 2021-01-20
    • 2013-08-18
    • 2017-05-24
    • 2018-01-24
    • 2012-10-13
    相关资源
    最近更新 更多