《深入php面向对象,模式与实践》中指出:全局变量是面向对象程序员遇到的引发bug的主要原因之一,这是因为全局变量将类捆绑在特定的环境中,破坏了封装。然而,为了能够使所有类够能够访问到某个对象,会不惜忍受全局访问的缺陷。
总结来说,不使用全局变量,又想要使得每个类都能访问到对象。问题的关键点即:
1.对象应该被系统中的任何对象使用。
2.对象不应该被存储在会被复写的全局变量中。
3.系统中不应该出现超过一个的该变量。
为了解决这个方案,可以使用单例模式。
单例模式的实现思想是:将类的构造函数设置为private权限,同时采用一个静态方法和静态属性来间接实例化对象。
class singleton{
private static $instance = NULL;
private $props = array();
private function __construct(){
}
public static function getInstance(){
if(empty(SELF::$instance)){
SELF::$instance = new SELF();
}
return self::$instance;
}
public function setProp($prop,$value){
$this->props[$prop] = $value;
}
public function getProp($prop){
return $this->props[$prop];
}
private function __set($prop,$value){
//省略之
}
private function __get(){
//省略
}
private function __clone(){
//省略
}
}
