類型提示:物件陣列
將物件陣列作為參數傳遞給函數時,如果未指定參數類型。例如,考慮以下程式碼:
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