Dica de tipo: array de objetos
Ao passar um array de objetos como um argumento para uma função, você pode encontrar um erro se o o tipo de argumento não foi especificado. Por exemplo, considere o seguinte código:
class Foo {}
function getFoo(Foo $f) {}
A tentativa de passar um array de objetos Foo para getFoo resultará em um erro fatal:
Argument 1 passed to getFoo() must be an instance of Foo, array given
Para superar esse problema, você pode especificar o tipo de argumento como um array do tipo de objeto desejado usando uma classe personalizada. Por exemplo, uma classe ArrayOfFoo pode ser definida da seguinte forma:
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');
}
}
Esta classe garante que apenas objetos Foo possam ser atribuídos aos seus elementos. A função getFoo pode então ser atualizada para aceitar um argumento ArrayOfFoo:
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
Agora, passar uma matriz de objetos Foo para getFoo funcionará conforme o esperado.
Alternativamente, a biblioteca Haldayne pode ser usada para simplificar o processo:
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
Esta classe fornece verificações integradas para garantir que apenas objetos Foo sejam permitidos no array.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3