Подсказка типа: массив объектов
При передаче массива объектов в качестве аргумента функции вы можете столкнуться с ошибкой, если тип аргумента не указан. Например, рассмотрим следующий код:
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