un langage couramment utilisé dans les langages OO comme Python et Ruby est instanciation d'un objet et l'enchaînement des méthodes qui renvoient une référence à l'objet lui-même, tels que:Instance de classe "Inline" en PHP? (Pour la facilité de la méthode Chaining)
s = User.new.login.get_db_data.get_session_data
En PHP, il est possible de reproduire ce comportement comme ceci:
$u = new User();
$s = $u->login()->get_db_data()->get_session_data();
Essayer les résultats suivants dans syntax error, unexpected T_OBJECT_OPERATOR
:
$s = new User()->login()->get_db_data()->get_session_data();
Il semble que cela pourrait être accompli en utilisant des méthodes statiques, ce qui est probablement ce que je finirai par faire, mais je voulais vérifier le lazyweb: Y at-il réellement un moyen propre et simple d'instancier les classes PHP "inline" (comme le montre dans l'extrait ci-dessus) à cette fin?
Si je décide d'utiliser des méthodes statiques, est trop sorcerous d'avoir une méthode statique de classe retourne une instanciation de la classe elle-même? (Écrire efficacement mon propre constructeur-ce-qui-n'est-pas-un-constructeur?) Il se sent un peu sale, mais s'il n'y a pas trop d'effets secondaires effrayants, je pourrais le faire.
Je suppose que je pourrais aussi pré-instancier une UserFactory avec une méthode get_user(), mais je suis curieux de connaître les solutions à ce que j'ai demandé ci-dessus.
Depuis PHP 5.4 les travaux suivants: '(new User()) -> login() -> ...', voir [Changelog PHP] (http://php.net/ChangeLog-5.php) pour 5.4 .0 * "Ajout d'un membre de classe à l'instanciation (par exemple (new foo) -> bar()) support "* – hakre