」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何解決將物件數組作為函數參數傳遞時的錯誤?

如何解決將物件數組作為函數參數傳遞時的錯誤?

發佈於2024-11-08
瀏覽:140

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