物件陣列的類型提示
使用類別和函數時,類型提示可用於指定預期的參數類型。但是,當嘗試將物件數組傳遞給函數時,可能會發生錯誤。本文探討如何處理此類情況。
要理解此問題,請考慮以下類別和函數:
<code class="php">class Foo {} function getFoo(Foo $f) {}</code>
嘗試將Foo 物件陣列傳遞給getFoo 會導致錯誤:
Catchable fatal error: Argument 1 passed to getFoo() must be an instance of Foo, array given
要解決此問題,可以建立表示Foo 物件陣列的自訂類型。一種方法是建立一個擴展 ArrayObject 的類別並實作 offsetSet 方法來驗證新增到陣列中的任何值是否都是 Foo 的實例。
<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>
透過使用自訂 ArrayOfFoo 類型,您可以確保正在使用 Foo 物件數組,並且函數可以接收 ArrayOfFoo 參數。
另一個選擇是使用像 Haldayne 這樣的庫來處理用於成員資格要求檢查的樣板:
<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects { protected function allowed($value) { return $value instanceof Foo; } }</code>
以上是如何處理物件數組的類型提示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!