All pastes #430307 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-04-08 21:58 UTC
rendered paste body
// Basic plugin structure
abstract class PluginApi
{
    public function __construct() 
    {
        // Register ourselves at Core
        Core::getInstance()->registerPlugin($this);
    }
    /* Observer-Pattern */
    abstract public function update();
}
// Some concrete plugin
class SuperPlugin extends PluginApi
{
    public function update() 
    {
         // ...
    }
}
new SuperPlugin();

class Core
{
    private static $instance;
    /* 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();