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