"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver erros ao passar um array de objetos como argumentos de função?

Como resolver erros ao passar um array de objetos como argumentos de função?

Publicado em 2024-11-08
Navegar:627

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

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729205596 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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