单列模式的应用核心是使用静态方法和静态属性来间接实例化对象。
new self()抛出本对象的实例。
<?php
/**
* 单列模式
* Class Preferences
*/
class Preferences{
private $props = array();
private static $instance;
public static function getInstance(){
if(empty(self::$instance))
self::$instance = new self();
return self::$instance;
}
public function setProperty($key,$val){
$this->props[$key] = $val;
}
public function getProperty($key){
return $this->props[$key];
}
}
$obj = Preferences::getInstance();
$obj->setProperty('name','王华');
print_r($obj->getProperty());
注意:
因为单列模式在系统任何地方都可以被访问,所以它们可能导致很难调试的依赖关系。如果改变一个单列,那么所有使用该单列的类可能都会受到影响。在这里,依赖本身并不是问题。毕竟,我们在每一次声明一个有特定类型参数的方法时,也就创建了依赖关系。问题是,单列对象的全局化的性质会使程序员绕过类接口通信的特定线路。当单列被使用时,依赖便会被隐藏在方法内部,而并不会出现在方法声明中。