All pastes #431109 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-04-09 13:32 UTC
rendered paste body
<?php

abstract class PluginApi

{

    public function __construct()

    {

        // Register ourselves at Core

        Core::getInstance()->registerPlugin($this);

        echo "PluginAPI registered";

    }



    /* Observer-Pattern */

    abstract public function update();

}




// Some concrete plugin
 class SuperPlugin extends Core

{


	var $name = 'TestPlugin';



    public function update()

    {

         echo "called update";

    }

   public function test()
   {

   		echo "test";
   		$this->notify();

   }
}




// Application core

class Core

{

    private static $instance;
   


    /* Constructor */

    public function __construct()

    {

        self::$instance = $this;

        $this->plugins[] = array();

    }



    /* 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;

    }



    public function notify()

    {

        foreach($this->plugins as $observer) {

            $observer->update();

        }

    }

}

new Core();



Core::getInstance()->cTest->test();