Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回值取决于某个变量的布尔值_Php_Variable Assignment_Boolean Expression - Fatal编程技术网

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

Php 返回值取决于某个变量的布尔值,php,variable-assignment,boolean-expression,Php,Variable Assignment,Boolean Expression,我有一个回调函数,第二个参数是数组。 所以,我有这样的想法: public function foo ($something, $callback) { /** * function body */ $booleanOrArray = $this->bar(); if ( is_callable ( $callback ) ) { return call_user_func ( $callback, !is_array($booleanOrArray),

我有一个
回调
函数,第二个参数是
数组
。 所以,我有这样的想法:

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
的过程完成得很好,则返回带有数据的
数组,否则,bar函数返回
false
;因此,如果
bar
返回
false
,则
回调
函数中的第一个参数由
is_数组($booleanOrArray)
确定,因此,如果foo返回
false
,则存在错误,如果是
数组
,则该参数将为
false

但是,在我的应用程序中,我强制用户定义
回调
函数,如下所示:

$MyClass = new ClassInstance();
$MyClass->foo('firstParam', function ( $error, Array $data ) {
  if ( ! $error ) {
    var_dump($data);
  }
  else {
    print 'Hey!';
  }
});
但是,在编写了所有这些代码之后,我惊讶地发现
$booleanOrArray | |[]总是返回
false

在Javascript中,如果I code
var x=foo | | bar
,如果
foo
null
,或
false
,或
undefined
,则
x
将具有
值,反之亦然

因此,问题是:

  • 这在php中是可能的,还是我必须执行类似于
    $x=($booleanOrArray)的操作$布尔数组:[]

  • 在这种情况下,您是否有改进回调函数的想法?(不是基于意见,只是标准)

类似于
$x=($booleanOrArray)的东西$布尔数组:[]

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

$booleanOrArray ?: []
如果它不是falsy或空数组,则会生成
$booleanOrArray

类似于
$x=($booleanOrArray)的东西$布尔数组:[]

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

$booleanOrArray ?: []

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

建议:您可以使用
可调用的
类型提示,而不是手动强制执行它并引发异常。在我的真实应用程序中,我通常通过func_get_args()获取函数参数,但这是一个很棒的数据,谢谢!您可以这样使用:
$x=true或$x=[];var_dump(x美元)
$x=false或$x=[];var_dump(x美元)
但是@dev null allender建议的短三元运算符似乎更好。建议:您可以使用
可调用的
类型提示,而不是手动强制执行它并引发异常。在我的实际应用中,我通过func_get_args()获得函数参数,但这是一个很好的数据,谢谢!您可以这样使用:
$x=true或$x=[];var_dump(x美元)
$x=false或$x=[];var_dump(x美元)
但是@dev null居住者建议的短三元运算符似乎更好。