PHP単例モードの抽象クラス

1322 ワード

  • 構造関数は必ずprivateと宣言しなければならない.
  • $_instanceは必ずprivate staticと宣言しなければならない.
  • __cloneは必ず定義し、privateはcloneを防止しなければならない.
  • getInstance()は必ずpublic staticと宣言しなければならない.
  • 抽象クラスの抽象方法で、サブクラスはtestFunction()を書き直さなければならない.
  • abstract class SingletonBase
    {
    
        public $table = 'bar';
        private static $_instance;
    
        private function __construct()
        {
            echo 'this is the private parent construct';
        }
    
        public static function getInstance($className)
        {
            if (!self::$_instance instanceof self) {
                self::$_instance = new $className();
            }
            self::$_instance->testFunction();
            return self::$_instance;
        }
    
        abstract function testFunction();
    
        private function __clone()
        {
            trigger_error('Clone is not allow!', E_USER_ERROR);
        }
    }
    
    class SingletonFoo extends SingletonBase
    {
    
        public $table = 'foo';
    
        public static function getInstance()
        {
            return parent::getInstance(__CLASS__);
        }
    
        public function testFunction()
        {
            echo 'test function';
        }
    }
    
    $st = SingletonFoo::getInstance();