好吧,假设您正在讨论类型检查方法参数,它取决于:
>如果它期待一个对象,我使用type-hinting接口:
public function foo(iBar $bar)
>如果它只期望一个数组,我使用带有array关键字的type-hinting.
public function foo(array $bar)
>如果它期望一个字符串,int,bool或float,我将它转换为:
public function foo($bar) {
$bar = (int) $bar;
}
>如果它期待混合,我只是检查一个级联:
public function foo($bar) {
if (is_string($bar)) {
//handle string case
} elseif (is_array($bar)) {
//...
} else {
throw new InvalidArgumentException("invalid type");
}
}
>最后,如果它期望可迭代类型,我不使用类型提示.我首先检查它是否是一个数组,然后重新加载迭代器:
public function foo($bar) {
if (is_array($bar)) {
$bar = new ArrayIterator($bar);
}
if (!$bar instanceof Traversable) {
throw new InvalidArgumentException("Not an Iterator");
}
}
>如果它需要文件名或目录,只需用is_file确认:
public function foo($bar) {
if (!is_file($bar)) {
throw new InvalidArgumentException("File doesn't exist");
}
}
我认为处理大多数情况.如果你想到其他人,我很乐意回答他们……