J'utilise PHP 5 et j'ai entendu parler d'une nouvelle fonctionnalité de l'approche orientée objet, appelée «chaînage de méthodes». C'est quoi exactement? Comment le mettre en œuvre?
php
oop
method-chaining
Sanjay Khatri
la source
la source
Réponses:
C'est plutôt simple en fait, vous avez une série de méthodes de mutation qui retournent toutes les objets originaux (ou autres), de cette façon vous pouvez continuer à appeler des méthodes sur l'objet retourné.
Cela génère "ab"
Essayez-le en ligne!
la source
$foo->setBar(1)->setBaz(2)
vs$table->select()->from('foo')->where('bar = 1')->order('ASC)
. Ce dernier couvre plusieurs objets.$a = (new fakeString())->addA()->addB()->getStr();
En gros, vous prenez un objet:
Appelez une méthode qui fait effectivement un
return $this;
à la fin:Comme il renvoie le même objet, ou plutôt une référence au même objet, vous pouvez continuer à appeler des méthodes de la même classe à partir de la valeur de retour, comme ceci:
C'est ça, vraiment. Deux choses importantes:
Comme vous le notez, il s'agit uniquement de PHP 5. Cela ne fonctionnera pas correctement en PHP 4 car il renvoie les objets par valeur et cela signifie que vous appelez des méthodes sur différentes copies d'un objet, ce qui briserait votre code.
Encore une fois, vous devez renvoyer l'objet dans vos méthodes chaînables:
la source
return &$this
en PHP4?Essayez ce code:
la source
Le chaînage de méthodes signifie que vous pouvez enchaîner les appels de méthode:
Cela signifie que method1 () doit renvoyer un objet et method2 () reçoit le résultat de method1 (). Method2 () passe ensuite la valeur de retour à method3 ().
Bon article: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
la source
Une autre façon de chaîner les méthodes statiques:
Appel
la source
Il y a 49 lignes de code qui vous permettent d'enchaîner des méthodes sur des tableaux comme celui-ci:
Voir cet article qui vous montre comment enchaîner les soixante-dix fonctions array_ de PHP.
http://domexception.blogspot.fi/2013/08/php-magic-methods-and-arrayobject.html
la source
Si vous voulez dire le chaînage de méthodes comme en JavaScript (ou que certaines personnes gardent à l'esprit jQuery), pourquoi ne pas simplement prendre une bibliothèque qui apporte ce développement. expérience en PHP? Par exemple Extras - https://dsheiko.github.io/extras/ Celui-ci étend les types PHP avec les méthodes JavaScript et Underscore et fournit le chaînage:
Vous pouvez chaîner un type particulier:
ou
Vous pouvez également devenir polymorphe:
la source
Voici mon modèle qui est capable de trouver par ID dans la base de données. La méthode with ($ data) est mes paramètres supplémentaires pour la relation, donc je retourne le $ this qui est l'objet lui-même. Sur mon contrôleur, je peux l'enchaîner.
la source