Sugerencia de tipo: matriz de objetos
Al pasar una matriz de objetos como argumento a una función, puede encontrar un error si el El tipo de argumento no está especificado. Por ejemplo, considere el siguiente código:
class Foo {}
function getFoo(Foo $f) {}
Intentar pasar una matriz de objetos Foo a getFoo resultará en un error fatal:
Argument 1 passed to getFoo() must be an instance of Foo, array given
Para solucionar este problema, puede especificar el tipo de argumento como una matriz del tipo de objeto deseado utilizando una clase personalizada. Por ejemplo, una clase ArrayOfFoo se puede definir de la siguiente manera:
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 clase garantiza que solo se puedan asignar objetos Foo a sus elementos. La función getFoo luego se puede actualizar para aceptar un argumento ArrayOfFoo:
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
Ahora, pasar una serie de objetos Foo a getFoo funcionará como se esperaba.
Como alternativa, se puede utilizar la biblioteca Haldayne para simplificar el proceso:
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
Esta clase proporciona comprobaciones integradas para garantizar que solo se permitan objetos Foo en la matriz.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3