我想知道将默认数组值设置为空数组或 NULL 是否有任何区别。
例如:
function arrayTest(array $array = array()) {
if(!empty($array)) {
// Do something
}
}
或
function arrayTest(array $array = NULL) {
if(!empty($array)) {
// Do something
}
}
我注意到第一个示例不允许传递 NULL 值,而第二个示例则由于类型转换而允许传递 NULL 值。
还有其他区别吗?应该使用哪一个?
更新:
虽然这个答案对于这个特定问题来说仍然基本准确,但 PHP 中的类型提示已经发展,并且有更多的可能性可以使用。 从版本 7.1 开始,PHP 支持可为 null 的参数和返回值进行类型提示,因此您可以编写:
function arrayTest(?array $array) {
}
在这种情况下,参数可以为空(您可以将
null
传递给此函数)。但这仍然是强制性的;省略参数是错误的。
原答案如下
另一个区别是,如果您不传递参数,它将默认为
array()
或 null
,这是两个非常不同的值。当然,您可以检查这一点,但您需要考虑到这一点。 empty
对两者都适用,但是 null
上的 foreach 循环效果不太好,并且各种数组函数也会失败。
您注意到的是正确的:仅当您将
null
添加到声明中时,为类型提示的参数传递 = null
才有效。这不仅适用于数组,也适用于对象。在 PHP 中,PHP 无法创建强制但可以为 null 的类型提示参数。一旦将 =null
添加到声明中,您就可以传递 null
,但也可以省略该参数。
如果对你来说空数组和 null 之间没有逻辑区别,我会选择第一种默认为空数组的方法。那么至少你会知道输入始终是一个数组。我认为这让函数的实现者和使用它的程序员都更加清晰。但我想这只是一种观点,甚至不是一个强有力的观点。
我的主要建议是根本不要让论证成为可选的。根据我的经验,这将使此类函数的用法不清楚,特别是随着代码的增长和添加更多参数。