声明可选数组参数

问题描述 投票:0回答:1

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

例如:

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

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

我注意到第一个示例不允许传递 NULL 值,而第二个示例则由于类型转换而允许传递 NULL 值。

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

php arrays
1个回答
5
投票

更新:

虽然这个答案对于这个特定问题来说仍然基本准确,但 PHP 中的类型提示已经发展,并且有更多的可能性可以使用。 从版本 7.1 开始,PHP 支持可为 null 的参数和返回值进行类型提示,因此您可以编写:

function arrayTest(?array $array) {

}

在这种情况下,参数可以为空(您可以将

null
传递给此函数)。但这仍然是强制性的;省略参数是错误的。

原答案如下


另一个区别是,如果您不传递参数,它将默认为

array()
null
,这是两个非常不同的值。当然,您可以检查这一点,但您需要考虑到这一点。
empty
对两者都适用,但是
null
上的 foreach 循环效果不太好,并且各种数组函数也会失败。

您注意到的是正确的:仅当您将

null
添加到声明中时,为类型提示的参数传递
= null
才有效。这不仅适用于数组,也适用于对象。在 PHP 中,PHP 无法创建强制但可以为 null 的类型提示参数。一旦将
=null
添加到声明中,您就可以传递
null
,但也可以省略该参数。

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

我的主要建议是根本不要让论证成为可选的。根据我的经验,这将使此类函数的用法不清楚,特别是随着代码的增长和添加更多参数。

© www.soinside.com 2019 - 2024. All rights reserved.