单例模式的设计要求
1、拥有一个构造函数,并且为private。
2、拥有一个静态成员变量用来保持类的实例。
3、拥有一个访问这个实例的静态方法
<?php
class Dome{
static public $instance = null;
private function __construct(){}
public static function getInstance(){
if(!self::$instance){
self::$instance = new self();
}
return self::$instance;
}
private $test;
public function setTest($val){
$this->test = $val;
}
public function getTest(){
return $this->test;
}
}
$obj = Dome::getInstance();
$obj->setTest('test1');
echo $obj->getTest(); // test1
echo "\n";
$obj2 = Dome::getInstance();
echo $obj2->getTest(); // test1
注册树模式满足要求
1、将实例对象注册到一个全局的数组上面去。
2、需要调用的对象直接从数组里面获取
<?php
class RegisterTree{
protected static $objects = [];
public static function set($key,$obj){
self::$objects[$key] = $obj;
}
public static function get($key){
if(!isset(self::$objects[$key])){
self::$objects[$key] = new $key;
// return false;
}
return self::$objects[$key];
}
public static function _unset($key){
unset(self::$objects[$key]);
}
}
class A{
public function test(){
echo "A->test";
}
}
RegisterTree::set('a',new A);
RegisterTree::get('a')->test();