类型提示:对象数组
将对象数组作为参数传递给函数时,如果未指定参数类型。例如,考虑以下代码:
class Foo {}
function getFoo(Foo $f) {}
尝试将 Foo 对象数组传递给 getFoo 将导致致命错误:
Argument 1 passed to getFoo() must be an instance of Foo, array given
要解决此问题,您可以使用自定义类将参数类型指定为所需对象类型的数组。例如,ArrayOfFoo 类可以定义如下:
class ArrayOfFoo extends \ArrayObject {
public function offsetSet($key, $val) {
if ($val instanceof Foo) {
return parent::offsetSet($key, $val);
}
throw new \InvalidArgumentException('Value must be a Foo');
}
}
此类确保只有 Foo 对象才能分配给其元素。然后可以更新 getFoo 函数以接受 ArrayOfFoo 参数:
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
现在,将 Foo 对象数组传递给 getFoo 将按预期工作。
或者,可以使用 Haldayne 库来简化该过程:
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
此类提供内置检查以确保数组中只允许存在 Foo 对象。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3