声明一个可选的数组参数

时间:2015-01-01 16:41:17

标签: php arrays

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

例如:

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

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

我注意到的是第一个例子不允许传递NULL值,第二个例子因为类型转换而没有。

还有其他差异吗?应该使用哪一个?

1 个答案:

答案 0 :(得分:3)

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

您注意到的是正确的:只有将null添加到声明中,才能将= null传递给类型化参数。这不仅适用于数组,也适用于对象。在PHP中,PHP无法创建一个强制的类型化参数,但可以为null。只要在声明中添加=null,就可以传递null,但也可以省略参数。

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

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