Volviendo $ esto después de observador
-
16-10-2019 - |
Pregunta
Veo un poco de información en conflicto en el Internet y en los módulos 3 ª parte por igual - es un requisito o mejores prácticas a $this
retorno al final de un método de observador
por ejemplo:.
MyCompany_Module_Model_Observer.php
public function salesOrderSaveAfter($observer){
//do stuff
return $this;
}
Solución
El núcleo siempre return $this;
en el contexto de los métodos de observador -. Pero en realidad no parece ser una razón para ello
Rastreo de vuelta a través dispatchEvent()
encontrará el método principal de que los métodos de observación (llamadas 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;
}
Sin embargo, en ningún momento el valor de retorno es en realidad nunca usado o referenciado a ser pasado a otro observador en la cadena.
Tal vez Magento estaban pensando a largo plazo para usarlo como algunos medios para retener / pasar datos dentro instancia de clase $this
fuera de la utilización de sesiones / registro; o podría haber sido el código heredado que acaba de atascado .
No se puede ver una razón de peso para return $this
-. Pero dicho, si lo hacen en el núcleo, que es lo que hacemos
Como regla general, cualquiera que sea el núcleo hace - que consideramos las mejores prácticas. Con la excepción de las faltas de ortografía impactante )
Otros consejos
$ este (nunca mejor dicho) se llama una interfaz fluida. Se le permite llamar a varios métodos dentro de un objeto sin tener referirse a una variable definida.
Es sólo una convención Magento para siempre vuelven $this
en lugar de void
(nada) si un método no tiene otro valor de retorno, independientemente de que esté siendo utilizada para una interfaz fluida en cualquier lugar o no.
La ventaja es, que no necesita pensar acerca de si es útil o no, y una interfaz fluida superfluo es mejor que una falta. Además, Magento fuerza empezar a usarlas para los observadores, aunque esto es muy poco probable.
Algunos años más tarde ...:)
El núcleo siempre devuelven $ presente; en el contexto de los métodos de observador - [...]
o
Es sólo una convención Magento para volver siempre $ esto en vez de vacío (nada) si un método no tiene otro valor de retorno [...]
No, en serio. Acaba de comprobar algunos observadores en 1.9.3.x y muchos no retorno (void
). Así que no es muy claro "lo que hace código del núcleo";)
he utilizado en mi código $return $this;
también, pero hoy en día - no habrá cambios en el código M1 - Me dejo. Creo - si leo código de otros - un método void
es más claro, entonces, uno con una return $this
añadido a ciegas, que no se usa nunca
Editar
Si se utiliza Aoe_Scheduler también puede devolver un string
o array
para mostrarla en la historia de cron.
No se encuentra ninguna documentación de las características de este ... código relacionado aquí: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229 -L259