PHP:什么时候检查数组的可选参数类型?


PHP: When should I check optional parameter type for array?

检查函数中可选参数类型的最佳方法是什么?到目前为止,我看到的每一个例子都是下面的第二种风格。这是比选项1更好的方法吗,还是仅仅因为你不能直接检查参数中的某些东西?我需要我的可选参数是一个数组,如果它被传递。

1)

public function foo($reqData, array $optData = NULL) {
  ...
  if ($optData) {
    foreach ($optData...
  }
}

或2)

public function foo($reqData, $optData = NULL) {
  ...
  if (is_array($optData)) {
    foreach ($optData...
  }
}

第二个选项通常更可取,因为如果传入数组以外的东西,会得到致命错误:

function foo1 (array $opt) { var_dump($opt); }
function foo2 ($opt = null) { var_dump($opt); }
foo2(array('bar')); // dumps out an array with 'bar' in it
foo1('bar'); // catchable fatal error

如果PHP有函数重载,那就不是问题了

OOP的一个有趣之处在于添加约束以避免bug。如果你遵循这个想法,第一种方法似乎更好。

许多PHP开发人员并不像使用C那样严格使用编码,因为PHP本质上是灵活/宽松的,并且没有习惯成为最严格的限制。