registerPlugin($this); } /* Observer-Pattern */ abstract public function update(); } // Some concrete plugin class SuperPlugin extends PluginApi { private $aInfo = array(); public function __construct() { //Register at Core Core::getInstance()->registerPlugin($this); $this->aInfo[] = 'TemplatePlugin'; $this->aInfo[] = 'Demonstrates the structure of the PluginAPI'; $this->aInfo[] = ''; $this->aInfo[] = 'Created by me'; } public function getInfo() { return $this->aInfo; } public function update() { echo "called update"; } } new SuperPlugin(); // Application core class Core { private static $instance; private $plugins = array(); /* Constructor */ public function __construct() { self::$instance = $this; } /* Singleton pattern */ public static function getInstance() { if (! self::$instance) { return new Core(); } return self::$instance; } /* Init idiom */ private function init() { } /* Observer-Pattern */ public function registerPlugin(& $pPlugin) { $this->plugins[] =& $pPlugin; } protected function notify() { foreach($this->plugins as $observer) { $observer->update(); } } } new Core(); ?>