Widzę niektóre sprzeczne informacje zarówno w Internecie, jak i w modułach innych firm - czy jest to wymóg lub najlepsza praktyka, aby powrócić $thisna końcu metody obserwatora?
Rdzeń zawsze return $this;w kontekście metod obserwacyjnych - ale tak naprawdę nie ma powodu.
Śledząc wstecz dispatchEvent()znajdziesz główną metodę, która wywołuje metody obserwatora (in ./app/Core/Model/App.php)
protectedfunction _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;}
Ale w żadnym momencie wartość zwrotna nigdy nie była faktycznie używana ani przywoływana, aby mogła zostać przekazana innemu obserwatorowi w dół łańcucha.
Być może Magento myślało w dłuższej perspektywie, aby użyć go jako pewnego środka do przechowywania / przekazywania danych w $thisinstancji klasy poza wykorzystaniem sesji / rejestru; lub może to być przestarzały kod, który właśnie utknął .
Nie widzę ważnego powodu return $this- ale biorąc to pod uwagę, jeśli robią to w rdzeniu, właśnie to robimy.
Zasadą jest, że cokolwiek robi rdzeń - uważamy za najlepszą praktykę. Z wyjątkiem szokujących błędów ortograficznych :)
Wstydzę się przyznać, że czasami zwracam $ obserwatora, aby pozbyć się ostrzeżenia IDE o niewykorzystanym parametrze ...
Daniel Sloof
@Daniel - po prostu nie dodawaj parametru do podpisu obserwatora. PHP nie ma nic przeciwko. Ale z drugiej strony przekazany parametr może być potrzebny w przyszłości.
nevvermind
7
$ this (zamierzone słowo) nazywa się płynnym interfejsem. Pozwala na wywołanie wielu metod w obiekcie bez konieczności odwoływania się do zdefiniowanej zmiennej.
Dziękuję - rozumiem płynne interfejsy. Szukam ważnego powodu, aby powrócić, $thisgdy naprawdę nie ma potrzeby używania płynnych interfejsów obserwatorów.
philwinkle
1
@Kevin - Nie potrzebujesz płynnego interfejsu w obserwatorach Maga. Nie żebym o tym wiedział.
nevvermind
5
To tylko konwencja Magento, aby zawsze zwracać $thiszamiast void(nic), jeśli metoda nie ma innej wartości zwracanej, niezależnie od tego, czy faktycznie jest używana dla płynnego interfejsu gdziekolwiek, czy nie.
Zaletą jest to, że nie trzeba się zastanawiać, czy jest to przydatne, czy nie, a zbędny płynny interfejs jest lepszy niż brakujący. Ponadto Magento może zacząć używać ich do obserwatorów, chociaż jest to bardzo mało prawdopodobne.
Rdzeń zawsze zwraca $ to; w kontekście metod obserwacyjnych - [...]
lub
To tylko konwencja Magento, aby zawsze zwracać $ zamiast void (nic), jeśli metoda nie ma innej wartości zwracanej [...]
Nie naprawdę. Właśnie sprawdziłem niektórych obserwatorów w 1.9.3.x i wielu nic nie zwraca ( void). Więc nie jest do końca jasne, „co robi kod podstawowy”;)
Użyłem również $return $this;mojego kodu, ale dziś - nie będzie żadnych zmian w kodzie M1 - zostawię go. Myślę, że - jeśli czytam inne kody - voidmetoda jest bardziej przejrzysta niż metoda z ślepo dodanym return $this, która nigdy nie jest używana.
Edytować:
Jeśli używasz Aoe_Scheduler, możesz również zwrócić a stringlub arraywyświetlić go w historii cron.
$ this (zamierzone słowo) nazywa się płynnym interfejsem. Pozwala na wywołanie wielu metod w obiekcie bez konieczności odwoływania się do zdefiniowanej zmiennej.
źródło
$this
gdy naprawdę nie ma potrzeby używania płynnych interfejsów obserwatorów.To tylko konwencja Magento, aby zawsze zwracać
$this
zamiastvoid
(nic), jeśli metoda nie ma innej wartości zwracanej, niezależnie od tego, czy faktycznie jest używana dla płynnego interfejsu gdziekolwiek, czy nie.Zaletą jest to, że nie trzeba się zastanawiać, czy jest to przydatne, czy nie, a zbędny płynny interfejs jest lepszy niż brakujący. Ponadto Magento może zacząć używać ich do obserwatorów, chociaż jest to bardzo mało prawdopodobne.
źródło
Kilka lat później ... :)
lub
Nie naprawdę. Właśnie sprawdziłem niektórych obserwatorów w 1.9.3.x i wielu nic nie zwraca (
void
). Więc nie jest do końca jasne, „co robi kod podstawowy”;)Użyłem również
$return $this;
mojego kodu, ale dziś - nie będzie żadnych zmian w kodzie M1 - zostawię go. Myślę, że - jeśli czytam inne kody -void
metoda jest bardziej przejrzysta niż metoda z ślepo dodanymreturn $this
, która nigdy nie jest używana.Edytować:
Jeśli używasz Aoe_Scheduler, możesz również zwrócić a
string
lubarray
wyświetlić go w historii cron.Nie mogę znaleźć żadnych dokumentów dla tej funkcji ... powiązany kod tutaj: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259
źródło