類型提示:物件陣列
將物件陣列作為參數傳遞給函數時,如果未指定參數類型。例如,考慮以下程式碼:
<code class="php">class Foo {} function getFoo(Foo $f) {}</code>
嘗試將Foo 物件陣列傳遞給getFoo 將導致致命錯誤:
<code class="php">Argument 1 passed to getFoo() must be an instance of Foo, array given</code>
要解決此問題,您可以使用自訂類別將參數類型指定為所需物件類型的陣列。例如,ArrayOfFoo 類別可以定義如下:
<code class="php">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'); } }</code>
該類別確保只有 Foo 物件才能分配給其元素。然後可以更新 getFoo 函數以接受 ArrayOfFoo 參數:
<code class="php">function getFoo(ArrayOfFoo $foos) { foreach ($foos as $foo) { // ... } }</code>
現在,將 Foo 物件陣列傳遞給 getFoo 將按預期工作。
或者,Haldayne 庫可以是用於簡化過程:
<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects { protected function allowed($value) { return $value instanceof Foo; } }</code>
此類提供內建檢查以確保數組中僅允許 Foo 物件。
以上是如何解決將物件數組作為函數參數傳遞時的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!