Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Event {
- static protected $_events = array();
- static public function attach ($event, $method) {
- if(!is_string($event))
- throw new \InvalidArgumentException('$event should be a string.');
- if(!is_callable($method))
- throw new \InvalidArgumentException('$method is not callable.');
- $class = get_called_class();
- if(!isset(self::$_events[$class]))
- self::$_events[$class] = array();
- if(!isset(self::$_events[$class][$event]))
- self::$_events[$class][$event] = array();
- self::$_events[$class][$event][] = $method;
- }
- static public function trigger ($event, $arguments = array()) {
- $class = get_called_class();
- if(!isset(self::$_events[$class]) || !isset(self::$_events[$class][$event]))
- return;
- foreach(self::$_events[$class][$event] as $method)
- call_user_func_array($method, $arguments);
- }
- }
- // the extending class
- class Page extends Event {
- public function render ($context) {
- self::trigger('before-render', array(&$context));
- $result = print_r($context, true);
- self::trigger('after-render', array($result));
- return $result;
- }
- }
- // in your setup file, plugins, etc.
- Page::attach('before-render', function ($context) {
- $context['active'] = true;
- });
- // rendering something:
- $page = new Page();
- echo $page->render(array('name' => 'Jacob'));
- // Array
- // (
- // [name] => Jacob
- // [active] => 1
- // )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement