【问题标题】:PHP difference in array parametersPHP数组参数的区别
【发布时间】:2016-08-30 10:18:32
【问题描述】:

在 PHP 7 中,我希望参数中只包含数组,但它们之间有什么区别:

function exampleA(array $a, array $b)
{

}

function exampleB($a = array(), $b = array())
{

}

不确定我应该使用哪个。

【问题讨论】:

  • 第二个选项是将默认值设置为空数组。如果您在没有参数的情况下调用该函数,则 $a 和 $b 将是空数组
  • function exampleA(array $a, array $b) 明确需要一个数组,如果传入的参数不是数组,则会抛出错误。 function exampleB($a = array(), $b = array) 不关心 $a 和 $b 的类型是什么,如果不传入就会设置为空数组。

标签: php parameters type-hinting


【解决方案1】:

cmets 不错,但我想我们需要一个答案。

exampleA() 使用 array $a 会强制参数为 array 类型,否则会引发可捕获的错误:

exampleA();
exampleA(1, 'A');

两者都有:

可捕获的致命错误:传递给 exampleA() 的参数 1 必须是数组类型,没有给出,在第 X 行的文件中调用并在第 X 行的文件中定义

而在exampleB() 中使用$a = array()

function exampleB($a = array(), $b = array())
{
    var_dump(get_defined_vars());
}

在没有提供值时将默认值设置为空数组:

exampleB();

产量:

array(2) {   ["a"]=>   array(0) {   }   ["b"]=>   array(0) {   } }

但是,当提供值时,无论类型如何,都会使用这些值:

exampleB(1, 'A');

产量:

array(2) {   ["a"]=>   int(1)   ["b"]=>   string(1) "A" }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多