답변:
핵심은 항상 return $this;
옵저버 메소드와 관련이 있지만 실제로 그 이유는 없습니다.
다시 추적 dispatchEvent()
하면 옵저버 메소드를 호출하는 주요 메소드를 찾을 수 있습니다 (in ./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;
}
그러나 어떤 시점에서도 실제로는 체인 아래로 다른 옵저버로 전달되는 데 사용되거나 참조 된 리턴 값이 아닙니다.
아마도 Magento는 $this
세션 / 레지스트리 를 사용하지 않고 클래스 인스턴스 내에서 데이터를 유지 / 전달하는 수단으로 더 오래 사용하려고 생각했을 것입니다 . 또는 막 붙어 있던 레거시 코드 일 수도 있습니다 .
나는 설득력있는 이유를 볼 수 없습니다. return $this
그러나 그것이 핵심에서 그렇게한다면 그것은 우리가하는 것입니다.
일반적으로 핵심이 무엇이든간에 모범 사례로 간주됩니다. 충격적인 철자 실수를 제외하고 :)
$ this (pun 예정)를 유창한 인터페이스라고합니다. 정의 된 변수를 다시 참조하지 않고도 객체 내에서 여러 메서드를 호출 할 수 있습니다.
$this
관찰자에게 유창한 인터페이스를 실제로 사용하지 않을 때 돌아올 강력한 이유를 찾고 있습니다.
몇 년 후 ... :)
핵심은 항상 $ this를 반환합니다. 관찰자 방법의 맥락에서-[...]
또는
메소드에 다른 리턴 값이없는 경우 항상 void (아무것도) 대신 $ this를 리턴하는 것은 단지 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