В интернете и в сторонних модулях я вижу некоторую противоречивую информацию - является ли это обязательным требованием или наилучшей практикой возвращаться $thisв конце метода наблюдателя?
Ядро всегда return $this;в контексте методов наблюдателя - но на самом деле нет причин для этого.
Проследуя назад, dispatchEvent()вы найдете основной метод, который вызывает методы наблюдателя (в ./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;}
Но ни в коем случае возвращаемое значение никогда не использовалось или не использовалось для передачи другому наблюдателю по цепочке.
Возможно, Magento подумал о том, чтобы использовать его как средство для сохранения / передачи данных внутри $thisэкземпляра класса вне использования сессий / реестра; или это мог быть устаревший код, который только что застрял .
Я не вижу убедительной причины return $this- но, как говорится, если они делают это в основном, это то, что мы делаем.
Как правило, независимо от того, что делает ядро - мы считаем наилучшей практикой. За исключением шокирующих орфографических ошибок :)
Мне стыдно признаться, что я иногда возвращаю $ наблюдатель, чтобы избавиться от предупреждения IDE о неиспользованном параметре ...
Даниэль Слооф
@Daniel - просто не добавляйте параметр в подпись наблюдателя. PHP не против. Но опять же, переданный параметр может понадобиться в будущем.
nevvermind
7
$ this (каламбур предназначен) называется свободным интерфейсом. Это позволяет вам вызывать несколько методов внутри объекта, не обращаясь к определенной переменной.
Спасибо - я понимаю беглые интерфейсы. Я ищу вескую причину, чтобы вернуться, $thisкогда нет смысла использовать беглые интерфейсы для наблюдателей.
Philwinkle
1
@Kevin - Вам не нужен свободный интерфейс в наблюдателях Мага. Не то, что я знаю о.
nevvermind
5
Это просто соглашение Magento - всегда возвращать $thisвместо void(ничего), если метод не имеет другого возвращаемого значения, независимо от того, используется ли он для свободного интерфейса где-либо или нет.
Преимущество заключается в том, что вам не нужно думать о том, полезен он или нет, а избыточный беглый интерфейс лучше, чем отсутствующий. Кроме того, Magento может начать использовать их для наблюдателей, хотя это маловероятно.
Ядро всегда возвращает $ this; в контексте методов наблюдателя - [...]
или
Это просто соглашение Magento всегда возвращать $ this вместо void (ничто), если у метода нет другого возвращаемого значения [...]
Нет, правда. Только что проверил некоторых наблюдателей в 1.9.3.x и многие ничего не возвращают ( void). Так что не совсем понятно "что делает основной код";)
Я тоже использовал $return $this;в своем коде, но сегодня - в коде M1 не будет никаких изменений - я бы оставил это. Я думаю - если я читаю чужой код - voidметод более понятен, чем метод с слепым добавлением return $this, который никогда не используется.
Редактировать:
Если вы используете Aoe_Scheduler, вы также можете вернуть stringили, arrayчтобы отобразить его в хронологии.
$ this (каламбур предназначен) называется свободным интерфейсом. Это позволяет вам вызывать несколько методов внутри объекта, не обращаясь к определенной переменной.
источник
$this
когда нет смысла использовать беглые интерфейсы для наблюдателей.Это просто соглашение Magento - всегда возвращать
$this
вместоvoid
(ничего), если метод не имеет другого возвращаемого значения, независимо от того, используется ли он для свободного интерфейса где-либо или нет.Преимущество заключается в том, что вам не нужно думать о том, полезен он или нет, а избыточный беглый интерфейс лучше, чем отсутствующий. Кроме того, Magento может начать использовать их для наблюдателей, хотя это маловероятно.
источник
Несколько лет спустя ... :)
или
Нет, правда. Только что проверил некоторых наблюдателей в 1.9.3.x и многие ничего не возвращают (
void
). Так что не совсем понятно "что делает основной код";)Я тоже использовал
$return $this;
в своем коде, но сегодня - в коде M1 не будет никаких изменений - я бы оставил это. Я думаю - если я читаю чужой код -void
метод более понятен, чем метод с слепым добавлениемreturn $this
, который никогда не используется.Редактировать:
Если вы используете Aoe_Scheduler, вы также можете вернуть
string
или,array
чтобы отобразить его в хронологии.Не удается найти какие-либо документы для этих функций ... связанный код здесь: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259
источник