/*
* php中的单列模式
* 对于这两种写法想用那种为所谓都行
* 优点:单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源
* 缺点:php是所类型的服务端语言 在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时
* 都会重新建立新的对象,都会在页面执行完毕后被清空,
* 这样似乎PHP单例模式就没有什么意义了,
* 所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的
* 之所以php变态就是自动释放资源
* 应用场景DB.Log………………操作
* */
class Single {
/*
* 设置一个私有的静态属性
* 为什么呢
* 首先来说私有的吧 第一是防止该属性在外部被调用(因为还没有得到实例的对象)
* 静态的呢 不属于这个对象但是他还有一个特点就是
* 静态变量是只存在于函数作用域的变量,不过,在函数执行完成后
* 它仅仅保留一个变量值 而他的值不会丢失 也就是说下了调用 他还记得这个值
* 说白了 下次调用还是他这个值
*
* */
private static $data = NULL;
/*
* 设置配置属性
* */
protected $res = array();
/*
* 私有的是防止被实例化 首先加载你想加载的内容
* */
private function __construct() {
}
/*
* 防止克隆对象
* */
private function __clone() {
}
/*
* 对外提供一个公共的一个接口以供访问啊 静态的不说了
* 静态方法和非静态方法之间有一个重要的区别:在调用静态方法时,不再需要拥有类的实例。
* 静态方法和非静态方法使用原则:一是如果某个方法中不包含$this变量,就应该时静态方法;如果不需要类的实例,可能还应该使用静态类,
* 这样可以免去实例化类的工作。另,在静态方法中时不能使用$this变量的,因为静态方法不属于某个特定的实例。
* */
public static function getInstance() {
if (self::$data instanceof self) {
return self::$data;
} else {
return self::$data = new self();
}
}
/*
* 你还可以用一些其他的魔术方法 比如__set() __get() …………
* 你还可以写一些其他的公共方法
* */
//读取内部的信息
public function __get($key) {
if (array_key_exists($key, $this -> res)) {
return $this -> res[$key];
} else {
return NULL;
}
}
//动态增加或者改变
public function __set($key, $value) {
$this -> res[$key] = $value;
}
}
class Single {
protected static $data = NULL;
protected $res = array();
final protected function __construct() {
}
final protected function __clone() {
}
public static function getInstance() {
if (self::$data instanceof self) {
return self::$data;
} else {
return self::$data = new self();
}
}
public function __get($key) {
if (array_key_exists($key, $this -> res)) {
return $this -> res[$key];
} else {
return NULL;
}
}
public function __set($key, $value) {
$this -> res[$key] = $value;
}
}
转载请注明原文地址: https://ju.6miu.com/read-965681.html