2010-04-06 17 views
5

Je ne trouve pas un exemple simple à propos de ma question ci-dessus: comment puis-je détecter la fin d'une chaîne de méthodes?Détection de la fin de la chaîne de méthode en PHP?

Je viens de regarder Zend_Db_Select par exemple mais celui-ci est trop complexe pour cette simple question je pense.

Est-il possible d'attraper la 'fin' d'une chaîne de méthode en PHP?

grâce, Fabrik

Répondre

2

Non, ce n'est pas possible.

Zend_Db_Select ne pas ne pas détecter la fin de la chaîne de la méthode. Chaque méthode que vous chaînez renvoie simplement $this et lorsque vous arrêtez d'enchaîner, vous avez arrêté de chaîner. Il n'y a pas de magie quelque chose qui dit: Hey, c'est la fin de la chaîne.

Exemple:

$foo = $this->is()->a()->method()->chain(); 

Si toutes les méthodes return $this, puis $foo contiendra le résultat de chain(), donc $this à nouveau. Vous pouvez continuer à enchaîner à partir de là. Bien sûr, les méthodes feront d'autres choses en plus de renvoyer $this, par ex. définir l'état interne - mais c'est vraiment tout ce qu'il ya à propos de Method chaining.

Si votre code doit savoir qu'il a atteint la fin d'une chaîne, vous devez configurer la chaîne avant de l'exécuter, par ex. Chain of Responsibility pattern.

+0

Probablement j'ai besoin de vous croire mais comment pouvez-vous expliquer que Zend_Db_Select le fait simplement? – fabrik

+0

@fabrik voir la mise à jour – Gordon

+0

On dirait que je suis juste oublié à nouveau. Donc celui-ci (Zend_Db_Select) était le pire exemple parce qu'il ne va pas chercher quoi que ce soit, il ne construit que la requête. Ai-je raison? – fabrik