Vejo algumas informações conflitantes na Internet e nos módulos de terceiros - é um requisito ou prática recomendada retornar $thisno final de um método de observação?
O núcleo sempre return $this;no contexto dos métodos de observação - mas na verdade não parece haver uma razão para isso.
No rastreamento, dispatchEvent()você encontrará o método principal que chama métodos de observador (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;}
Mas em nenhum momento o valor de retorno realmente usado ou referenciado é passado para outro observador na cadeia.
Talvez o Magento estivesse pensando em longo prazo para usá-lo como um meio de reter / passar dados dentro da $thisinstância da classe, fora do uso de sessões / registro; ou poderia ter sido um código legado que acabou de ficar preso .
Não vejo uma razão convincente para isso return $this- mas, dito isso, se eles fazem isso no centro, é isso que fazemos.
Como regra geral, o que quer que o núcleo faça - consideramos as melhores práticas. Com exceção dos erros de ortografia chocantes :)
Tenho vergonha de admitir que às vezes eu voltar $ observador para se livrar de aviso IDE do parâmetro não utilizado ...
Daniel Sloof
@ Daniel - apenas não adicione o parâmetro na assinatura do observador. PHP não se importa. Mas, novamente, o parâmetro passado pode ser necessário no futuro.
Nevevind
7
$ this (trocadilhos) é chamado de interface fluente. Ele permite que você chame vários métodos dentro de um objeto sem precisar se referir a uma variável definida.
Obrigado - eu entendo interfaces fluentes. Estou procurando um motivo convincente para retornar $thisquando realmente não há uso de interfaces fluentes nos observadores.
22413 philwinkle
11
@ Kevin - Você não precisa de uma interface fluente nos observadores de Mage. Não que eu saiba.
Nevevoind
5
É apenas uma convenção do Magento sempre retornar em $thisvez de void(nada) se um método não tiver outro valor de retorno, independentemente de ser realmente usado para uma interface fluente em qualquer lugar ou não.
A vantagem é que você não precisa pensar se é útil ou não, e uma interface fluente supérflua é melhor do que uma ausente. Além disso, o Magento pode começar a usá-los para observadores, mesmo que isso seja altamente improvável.
O núcleo sempre retorna $ this; no contexto dos métodos de observação - [...]
ou
É apenas uma convenção do Magento sempre retornar $ this em vez de void (nada) se um método não tiver outro valor de retorno [...]
Não mesmo. Acabei de verificar alguns observadores em 1.9.3.xe muitos não retornam nada ( void). Portanto, não está claro "o que o código principal faz";)
Também usei $return $this;no meu código, mas hoje - não haverá alterações no código M1 - eu o deixaria. Eu acho - se eu leio o código de outros - um voidmétodo é mais claro do que um método adicionado cegamente return $this, que nunca é usado.
Editar:
Se estiver usando Aoe_Scheduler, você também pode retornar um stringou arraypara exibi-lo no histórico do cron.
$ this (trocadilhos) é chamado de interface fluente. Ele permite que você chame vários métodos dentro de um objeto sem precisar se referir a uma variável definida.
fonte
$this
quando realmente não há uso de interfaces fluentes nos observadores.É apenas uma convenção do Magento sempre retornar em
$this
vez devoid
(nada) se um método não tiver outro valor de retorno, independentemente de ser realmente usado para uma interface fluente em qualquer lugar ou não.A vantagem é que você não precisa pensar se é útil ou não, e uma interface fluente supérflua é melhor do que uma ausente. Além disso, o Magento pode começar a usá-los para observadores, mesmo que isso seja altamente improvável.
fonte
Alguns anos depois ... :)
ou
Não mesmo. Acabei de verificar alguns observadores em 1.9.3.xe muitos não retornam nada (
void
). Portanto, não está claro "o que o código principal faz";)Também usei
$return $this;
no meu código, mas hoje - não haverá alterações no código M1 - eu o deixaria. Eu acho - se eu leio o código de outros - umvoid
método é mais claro do que um método adicionado cegamentereturn $this
, que nunca é usado.Editar:
Se estiver usando Aoe_Scheduler, você também pode retornar um
string
ouarray
para exibi-lo no histórico do cron.Não é possível encontrar documentos para esses recursos ... código relacionado aqui: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259
fonte