Код: Выделить всё
class FooBehavior
{
public function events()
{
return array(
'onAfterConstruct'=>'afterConstruct',
'onBeforeValidate'=>'beforeValidate',
'onAfterValidate'=>'afterValidate',
'onBeforeSave'=>'beforeSave',
'onAfterSave'=>'afterSave',
'onBeforeDelete'=>'beforeDelete',
'onAfterDelete'=>'afterDelete',
'onBeforeFind'=>'beforeFind',
'onAfterFind'=>'afterFind',
);
}
protected function afterConstruct($event) {}
protected function beforeValidate($event) {}
protected function afterValidate($event) {}
protected function beforeSave($event) {}
protected function afterSave($event) {}
protected function beforeDelete($event) {}
protected function afterDelete($event) {}
protected function beforeFind($event) {}
protected function afterFind($event) {}
public function attach()
{
$class = new ReflectionClass($this);
foreach ($this->events() as $event => $handler) {
if (!$class->getMethod($handler)->isProtected())
echo $handler;
}
}
}
class EmptyBehavior extends FooBehavior
{
public function events() { return array(); }
}
class GeneralBehavior extends FooBehavior {}
// EmptyBehavior
$start = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
$object = new EmptyBehavior();
$object->attach();
}
echo microtime(true) - $start, '<br/>';
// GeneralBehavior
$start = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
$object = new GeneralBehavior();
$object->attach();
}
echo microtime(true) - $start;