"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver errores al pasar una matriz de objetos como argumentos de función?

¿Cómo resolver errores al pasar una matriz de objetos como argumentos de función?

Publicado el 2024-11-08
Navegar:612

How to Resolve Errors When Passing an Array of Objects as Function Arguments?

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.

Declaración de liberación Este artículo se reimprime en: 1729205596 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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