Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

Php 声明可选数组参数

Php 声明可选数组参数,php,arrays,Php,Arrays,我想知道在将默认数组值设置为空数组或NULL时是否有任何区别 例如: function arrayTest(array $array = array()) { if(!empty($array)) { // Do something } } 或 我注意到第一个示例不允许传递NULL值,第二个示例允许传递NULL值,因为类型转换 还有其他区别吗?应该使用哪一个?另一个区别是,如果不传递参数,它将默认为array()或null,这是两个非常不同的值。当然,你可以检查

我想知道在将默认数组值设置为空数组或NULL时是否有任何区别

例如:

function arrayTest(array $array = array()) {
    if(!empty($array)) {
        // Do something
    }
}

我注意到第一个示例不允许传递NULL值,第二个示例允许传递NULL值,因为类型转换


还有其他区别吗?应该使用哪一个?

另一个区别是,如果不传递参数,它将默认为
array()
null
,这是两个非常不同的值。当然,你可以检查一下,但你需要考虑一下
empty
对这两种方法都有效,但是foreach循环over
null
不会很好地工作,各种数组函数也会失败

您注意到的是正确的:仅当您将
=null
添加到声明中时,才能为类型提示参数传递
null
。这不仅适用于数组,也适用于对象。在PHP中,PHP无法生成强制但可以为null的typehinted参数。只要将
=null
添加到声明中,就可以传递
null
,但也可以忽略参数

如果对您来说,空数组和null之间没有逻辑上的区别,我会选择默认为空数组的第一种方法。然后,至少您会知道输入始终是一个数组。我认为这将为函数的实现者和使用它的程序员增加清晰度。但我想这只是一个观点,甚至不是一个强有力的观点

我的主要建议是,根本不要让这个论点成为可选的。根据我的经验,这将使此类函数的使用变得不明确,尤其是在代码增长和添加更多参数的情况下

function arrayTest(array $array = NULL) {
    if(!empty($array)) {
        // Do something
    }
}