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();