声明一个可选的数组参数
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
,但也可以省略参数。
如果您认为空数组和空数组在逻辑上没有区别,我会选择第一种默认为空数组的方法。然后至少你会知道输入总是一个数组。我认为这为函数的实现者和使用它的程序员都增加了清晰度。但我想这只是一个意见,甚至不是一个强有力的意见。
我的主要建议是根本不要将参数设为可选。根据我的经验,这会使此类函数的用法变得不清楚,尤其是随着代码的增长和添加更多参数。
我想知道将默认数组值设置为空数组或 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
,但也可以省略参数。
如果您认为空数组和空数组在逻辑上没有区别,我会选择第一种默认为空数组的方法。然后至少你会知道输入总是一个数组。我认为这为函数的实现者和使用它的程序员都增加了清晰度。但我想这只是一个意见,甚至不是一个强有力的意见。
我的主要建议是根本不要将参数设为可选。根据我的经验,这会使此类函数的用法变得不清楚,尤其是随着代码的增长和添加更多参数。