声明可选的数组参数


Declaring an optional array argument

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

例如:

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

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

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

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

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

您注意到的是正确的:仅当您向声明中添加= null时,为键入提示参数传递null才有效。这不仅适用于数组,也适用于对象。在 PHP 中,在 PHP 中没有办法制作一个强制性但可以为空的键入提示参数。将=null添加到声明后,可以传递null但也可以省略参数。

如果对您来说空数组或 null 之间没有逻辑差异,我会选择默认为空数组的第一种方法。那么至少你会知道输入总是一个数组。我认为这增加了函数的实现者和使用它的程序员的清晰度。但我想这只是一种意见,甚至不是一个强烈的意见。

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