”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何解决将对象数组作为函数参数传递时的错误?

如何解决将对象数组作为函数参数传递时的错误?

发布于2024-11-08
浏览:616

How to Resolve Errors When Passing an Array of Objects as Function Arguments?

类型提示:对象数组

将对象数组作为参数传递给函数时,如果未指定参数类型。例如,考虑以下代码:

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 对象。

版本声明 本文转载于:1729205596如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3