Indice de type : tableau d'objets
Lorsque vous transmettez un tableau d'objets en tant qu'argument à une fonction, vous pouvez rencontrer une erreur si le le type d’argument n’est pas spécifié. Par exemple, considérons le code suivant :
class Foo {}
function getFoo(Foo $f) {}
Tenter de transmettre un tableau d'objets Foo à getFoo entraînera une erreur fatale :
Argument 1 passed to getFoo() must be an instance of Foo, array given
Pour surmonter ce problème, vous pouvez spécifier le type d'argument sous forme de tableau du type d'objet souhaité à l'aide d'une classe personnalisée. Par exemple, une classe ArrayOfFoo peut être définie comme suit :
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');
}
}
Cette classe garantit que seuls les objets Foo peuvent être attribués à ses éléments. La fonction getFoo peut ensuite être mise à jour pour accepter un argument ArrayOfFoo :
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
Maintenant, transmettre un tableau d'objets Foo à getFoo fonctionnera comme prévu.
Alternativement, la bibliothèque Haldayne peut être utilisée pour simplifier le processus :
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
Cette classe fournit des vérifications intégrées pour garantir que seuls les objets Foo sont autorisés dans le tableau.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3