Question

Je vois des informations contradictoires sur l'Internet et dans les modules 3ème partie aussi bien - est-il une exigence ou les meilleures pratiques à $this de retour à la fin d'une méthode d'observation

par exemple:.

MyCompany_Module_Model_Observer.php

public function salesOrderSaveAfter($observer){
    //do stuff
    return $this;
}
Était-ce utile?

La solution

Le noyau toujours return $this; dans le contexte des méthodes d'observation -. Mais il ne semble pas vraiment être une raison pour cela

Remontant par dispatchEvent() vous trouverez la principale méthode que les appels des méthodes d'observation (en ./app/Core/Model/App.php)

protected function _callObserverMethod($object, $method, $observer)
{
    if (method_exists($object, $method)) {
        $object->$method($observer);
    } elseif (Mage::getIsDeveloperMode()) {
        Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
    }
    return $this;
}

Mais à aucun moment, la valeur de retour jamais réellement utilisé ou fait référence à passer dans un autre observateur de la chaîne.

Peut-être Magento réfléchissait à plus long terme à l'utiliser comme un moyen de conserver / transmettre des données au sein de l'instance de classe $this en dehors de l'utilisation des sessions / registre; ou il aurait pu être le code existant qui vient coincé .

Je ne vois pas une raison impérieuse de return $this -. Mais cela étant dit, s'ils le font dans le noyau, c'est ce que nous faisons

En règle générale, quel que soit le noyau ne - que nous jugeons les meilleures pratiques. A l'exception des fautes d'orthographe choquant :)

Autres conseils

$ ce (jeu de mots) est appelé une interface fluide. Il vous permet d'appeler plusieurs méthodes dans un objet sans renvoyer à une variable définie.

Il est juste une convention Magento pour revenir toujours $this au lieu de void (rien) si une méthode n'a pas d'autre valeur de retour, quelle que soit qu'il soit effectivement utilisé pour une part d'interface fluide ou non.

L'avantage est que vous n'avez pas besoin de penser à si elle est utile ou non, et une interface fluide superflu est mieux qu'un manque. En outre, Magento peut commencer à les utiliser pour les observateurs, même si cela est très peu probable.

Quelques années plus tard ...:)

  

Le noyau retourne toujours cette $; dans le cadre des méthodes d'observation - [...]

ou

  

Il est juste une convention Magento pour revenir toujours cette $ au lieu de vide (rien) si une méthode n'a pas d'autre valeur de retour [...]

Pas vraiment. Juste vérifié certains observateurs 1.9.3.x et beaucoup rien de retour (void). Il est donc pas vraiment clair « quel code de base fait »;)

Je l'ai utilisé $return $this; dans mon code aussi, mais aujourd'hui - il n'y aura pas de changement dans le code M1 - je laisse. Je pense - si je lis code autres - une méthode de void est plus claire puis une avec un return $this aveuglément ajouté, qui n'a jamais été utilisé

.

Modifier

Si vous utilisez Aoe_Scheduler, vous pouvez également retourner un string ou array pour l'afficher dans l'histoire de Cron.

Impossible de trouver des documents pour cette ... Code caractéristiques connexes ici: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229 -L259

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top