Je me demande quel est le plus optimal sur le plan sémantique et technique de mes choix ici. J'ai créé une classe de registre d'objets simple, mais la méthode d'accès aux objets me demande ce qu'il y a de mieux. J'utilise actuellement la première variante:Choix de syntaxe pour accéder aux objets enfants
//the Registry methods can chain, each returning a self reference
$registry = Registry::getInstance()->register('myObject', new Object);
//accessing a registered object method
//in various possible ways
Registry::getInstance()->myObject->method(); //1
Registry::getInstance()->use('myObject')->method(); //2
$registry('myObject')->method(); //3
- La première variante utilise
__get()
magique, conformément à la syntaxe couramment. - La seconde utilise la méthode 'getter'
use()
. - Le troisième utilise la magie
__invoke()
, qui a été suggérée, mais je ne l'aime pas trop.
Je suis juste curieux de savoir si quelqu'un a un aperçu, ou des suggestions pour utiliser n'importe laquelle (ou aucune) de ces options. La raison d'utiliser une classe de registre dans mon cas est de fournir pseudo-globalisation des objets clés, pour une utilisation dans les fermetures imbriquées (en les déclarant avec use
chaque fois est lourd)
Ceci est un peu lié à mon autre question, à PHP closures and implicit global variable scope
Merci à l'avance :)
Une autre option qui serait plutôt sympa serait d'implémenter l'interface ArrayAccess afin que vous puissiez utiliser $ registry ['myObject'] -> method(); '. Cependant, pour des raisons d'efficacité, vous voudriez mettre en cache 'myObject' si vous deviez effectuer plusieurs opérations dessus, par exemple. '$ myObject = $ registry ['monObjet'];' – connec