Peut-on expliquer par exemple ce que $ obj -> $ a() -> $ b signifie? J'ai utilisé PHP OOP assez longtemps et j'ai vu dans certains endroits cette structure et pas seulement $ obj -> $ a(); Dans quels cas devrais-je l'utiliser?PHP OOP sur la référence
Répondre
$a = 'someMethod';
$b = 'someProperty';
$obj->$a()->$b;
est égal à:
$obj->someMethod()->someProperty;
En savoir plus sur variable variables
un $ est le nom d'une méthode. Par conséquent, si $a = "myFunc"
, cela équivaut à:
$obj->myFunc()->$b;
$ b semble être une référence à une propriété. La méthode semble renvoyer un objet, donc, si $b = "myProp"
, nous pouvons modifier cette valeur pour:
$obj->myFunc()->myprop;
C'est vraiment mauvaise forme pour une meilleure compréhension.
Cela signifie que $a()
renvoie un objet, et que $b
est un membre de l'objet $a()
renvoie.
Cette méthode est appelée enchaînant lorsque chaque méthode retourne l'objet original, donc différentes méthodes du même objet peut être appelé sans avoir à préciser à plusieurs reprises $obj->
avant chaque appel.
Cela peut certainement être le cas, mais il se peut qu'il ne soit pas chaîné si $ a renvoie un objet autre que $ obj. –
À droite, ce n'est pas le chaînage si différents objets sont renvoyés. Mais normalement, quand vous voyez cette syntaxe, elle fait partie d'une chaîne. Sinon, je considérerais cela comme une mauvaise pratique. –
Merci beaucoup! J'ai appris une nouvelle fonctionnalité utile dans PHP5 OOP pour moi. – Starmaster
Le terme réel est Interface Courant, comme indiqué est retourne l'objet original, Heres une classe exemple complet
Class Fluent {
public $var1;
public $var2;
function setVar1($value) {
$this->var1 = $value;
return $this;
}
function setVar2($value) {
$this->var2 = $value;
return $this;
}
function getVars() {
echo $this->var1 . $this->var2;
}
}
$fluent = new Fluent();
$fluent->setVar1("Foo")->setVar2("Bar")->getVars();
qui va évidemment revenir "foobar".
HTH
- 1. php acteur oop pour agir sur l'objet
- 2. PHP oop build array
- 3. OOP PHP classes
- 4. Forum avec Php OOP
- 5. PHP OOP question
- 6. PHP OOP: objets chaînables?
- 7. Fonction PHP OOP Priorité
- 8. PHP OOP question
- 9. Comment faire du design web basé sur OOP en PHP?
- 10. php oop extends problème
- 11. PHP OOP structure
- 12. php oop et mysql
- 13. Méthodes Chaînes PHP OOP
- 14. AS3 OOP MVC avec PHP
- 15. php Déclarations de fonctions OOP
- 16. PHP OOP: Pourquoi un getter?
- 17. Créateur de liens PHP OOP?
- 18. PHP OOP utilisation constante utilisation
- 19. PHP OOP 4/5 Compatibilité?
- 20. php variable scope dans oop
- 21. PHP: Portée variable dans OOP?
- 22. PHP OOP travaillant avec une hiérarchie d'objets
- 23. PHP OOP: Méthode unique par type d'argument?
- 24. PHP OOP: Comment fonctionne ce code?
- 25. Standard OOP Techniques pour la liste des projets PHP style
- 26. Programmation PHP OOP - Comment faire une demande
- 27. bonne façon d'afficher les données DB la façon OOP php?
- 28. Setters/Getters, Visibility [OOP] en PHP
- 29. classe objet en classe avec php oop
- 30. Bonnes suggestions pour l'apprentissage OOP PHP
Juste pour ajouter à cette réponse, la méthode est Enchaînement très bien, si vos interfaces de classe sont réfléchis (voir jQuery). Ce n'est pas un chaînage de méthode, c'est une méta-programmation. L'utilisation de variables ici, pour les noms d'objet et de méthode, rend le débogage plus difficile lorsque vous avez déplacé ces appels vers l'environnement d'exécution. Je ne peux pas dire si cette décision était bonne parce que le code n'est pas donné en contexte. –
Je suis d'accord que le chaînage de méthode est bien. Je pense cependant que le fait que nous ne puissions pas dire si ce code est raisonnable est un bon indicateur que ce n'est pas le cas. Il essaie d'être trop intelligent. –