我认为观察者模式总是作为“静态”来实现的,以便从任何范围调用,例如
<?php
class Observer {
// 在此处附加调用者的范围
private static $stackTrace = array( );
public static function wasTriggeredOnce() {
//... 如果不在堆栈中,则:
self::$stackTrace[] = max( debug_backtrace( ) );
}
}
class YourFramework {
public function launchPlatform() {
// 不允许用户两次启动应用程序!
Observer::wasTriggeredOnce();
}
}
// 原因是静态的
Observer::hereIsnoNeedToInstantiateAgain();
?>