class Preferences { private $props = array(); private static $instance; private function __construct(){} public static function getInstance(){ if(empty(self::$instance)){ self::$instance = new Preferences(); } return self::$instance; } public function setProperty($key,$value){ $this->props[$key] = $value; } public function getProperty($key){ return $this->props[$key]; } } $pref = Preferences::getInstance(); $pref->setProperty('name','captain'); var_dump($pref); echo $pref->getProperty('name')."<br>"; //输出:captain unset($pref); $pref2 = Preferences::getInstance(); var_dump($pref2); echo $pref2->getProperty('name'); //输出captain
从上面的例子我们可以看出,虽然我们unset了$pref,但是$pref2仍然是可以得到captain的值。打印两个对象,对象的标识是一样的。
UML图如下: