2009-12-29 5 views
3

Toujours sur les roues d'entraînement PHP-OOP, cette question peut appartenir au failblog.org. =)PHP avantages de chaînage de méthode?

Quels sont les avantages de la méthode de chaînage en PHP?

Je ne sais pas si c'est important, mais je vais appeler ma méthode statiquement. par exemple.

$foo = Bar::get('sysop')->set('admin')->render(); 

D'après ce que j'ai lu, toute méthode qui retourne $this est autorisé à être enchaîné. Je viens d'apprendre que c'est nouveau en PHP5. Il me semble qu'il peut y avoir des gains de vitesse si je n'ai pas besoin d'instancier un nouvel objet (en l'appelant statiquement) et que je sélectionne juste les quelques méthodes dont j'ai besoin dans la classe?

Est-ce que j'ai ce droit?

+0

Il est ce qu'on appelle une « interface fluide », ce n'est pas nouvelle, juste apparemment n'a pas fonctionné avant http://devzone.zend.com/article/1362 PHP5 – CaffGeek

+0

Cela fonctionne maintenant? Charmant! Je ne le savais pas. –

Répondre

6

L'utilisation de l'une ou l'autre approche ne présente pas d'avantages significatifs en termes de performances, en particulier sur un serveur de production doté d'un cache de byte. Le chaînage de méthodes est juste une façon plus courte d'écrire des choses. Comparer avec la version plus longue:

$foo = Bar::get('sysop'); 
$foo -> set('admin'); 
$foo -> render(); 

Il a quelques bizarreries, cependant: un IDE typique (comme Eclipse) peut auto-compléter votre code dans la version plus longue (tant que l'on sache le type de $foo) mais vous avez besoin de documenter le type de retour de toutes les méthodes pour travailler dans la version courte.

0

Il instancie toujours un objet; c'est juste jamais assigné à une variable. Fondamentalement, vous appelez simplement les méthodes d'un objet anonyme. Je pense que toute économie de cycle serait négligeable, mais je pense que les objets non assignés seraient libérés immédiatement après cette ligne de code, donc vous pourriez économiser de la mémoire (vous pourriez faire la même chose en réglant les objets affectés sur null quand vous avez fini avec eux).

La principale raison pour laquelle les gens utilisent le chaînage de méthodes est par commodité; vous faites beaucoup dans une ligne de code. Personnellement, je pense que c'est salissant et impossible à maintenir.

0

si je n'ai pas instancier un tout nouvel objet (appelant statiquement) et sélectionnez simplement les quelques méthodes dont j'ai besoin de la classe?

Mauvais! Pour retourner $this, la classe doit être instanciée.

+0

Vous apprenez quelque chose de nouveau chaque jour. Lol – Jeff

+0

Content de pouvoir aider :) – AntonioCS