FILE FOUND IN $path

"; **/ include(realpath($path)); return; } else { /** echo "
NO FILE IN $path

"; **/ } } } spl_autoload_register('DcAutoloader'); } class A implements Observer { public function __construct() { Hook::registerEventListener($this,'B.changed'); } public function notify($eventName, $data) { echo 'Event Name ' . $eventName . ' called with data ' . print_r($data,true); } } class B { use hookableTrait; public function __construct() { $this->prop3 = (object)$this->prop3; } private $prop1 = 'initProp1'; private $prop2 = 0; private $prop3 = ['testObjectProp' => 'testObjectPropValue']; public function setProp1($prop1) { $this->prop1 = $prop1; $this->updateHooks('changed',$this); } public function setProp2($prop2) { $this->prop2 = $prop2; $this->updateHooks('changed',$this); } public function setProp3($prop3) { $this->prop3 = $prop3; $this->updateHooks('changed',$this); } } class C extends B { private $prop4 = 'initProp4'; public function setProp4($prop4) { $this->prop4 = $prop4; $this->updateHooks('changed',$this); } } $observer = new A(); $observed = new B(); $observedExt = new C(); $observed->setProp1('newProp1Value'); $observed->setProp2(1); $observed->setProp3((object)['testObjectNewProp' => 'testObjectNewPropValue']); $observedExt->setProp4('newProp4Value');