声明一个可选的数组参数

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 值,而第二个示例允许传递 NULL 值,因为类型转换。

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

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

您注意到的是正确的:只有在声明中添加 = null 时,为类型提示参数传递 null 才有效。这不仅适用于数组,也适用于对象。在 PHP 中没有办法在 PHP 中创建强制类型提示参数但可以为空。只要在声明中添加 =null,就可以传递 null,但也可以省略参数。

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

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