一文带你搞懂PHP单例模式(php单例模式demo)不要告诉别人

随心笔谈11个月前发布 admin
68 0



目录简介场景优点缺点示例代码

单例模式是创建型对象的一种,用于如何优雅的创建对象。

让一个类最多产生一个对象。

只需要一个对象就能解决并且要使用多次的场景,比如框架的数据库连接。

减少资源消耗,一个对象能完成的事情,就不需要再实例化出来同样的东西。

对象生命周期都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式意义不大。

class Demo {
//声明一个存储对象的方法
private static $obj;
//防止当前类的外部进行实例化
private function __construct() {}
//防止当前类的外部进行克隆
private function __clone() {}
//声明一获取示例的方案
public static function getInstance() {
if(self::$obj===null) {
self::$obj=new self();
}
return self::$obj;
}
public function otherFunction() {
//todo …
}
}

测试代码:

class Demo {
//声明一个存储对象的方法
private static $obj;
//防止当前类的外部进行实例化
private function __construct() {}
//防止当前类的外部进行克隆
private function __clone() {}
//声明一获取示例的方案
public static function getInstance() {
if(self::$obj===null) {
//在此处打印数据到文件,可清楚的看出来执行了几次。
//静态方法或者静态属性可以称之为类变量或者类属性,会随着类的加载一并加载到内存当中。
file_put_contents(‘F:/stdout.txt’, 1,FILE_APPEND);
self::$obj=new self();
}
return self::$obj;
}
public function otherFunction() {
//todo …
}
}
//类的外部执行了5次实例化操作
for($i=0; $i < 5; $i++) {
Demo::getInstance();
}

升级版本:

如果每一个类都写一个单例模式的话,会显得有重复的代码,为此可以用继承去解决这个问题。

此时self就需要修改为static,不然self是当前对象而不是子类对象。

static::方法或属性,这种使用称为后期静态绑定。

这和但是static 修饰成员属性或者成员方法,一个是使用,一个是修饰。

class Singleton {
//声明一个存储对象的方法
private static $obj;
//防止当前类的外部进行实例化
private function __construct() {}
//防止当前类的外部进行克隆
private function __clone() {}
//声明一获取示例的方案
public static function getInstance() {
//检测$obj是否为空并是否不属于当前类
if(((static::$obj===null) && (! static::$obj instanceof static))) {
static::$obj=new static();
}
return static::$obj;
}
}
class Test extends Singleton {
public function func() {
return mt_rand(0, 10);
}
}
//使用:
Test::getInstance()->func();

到此这篇关于一文带你搞懂PHP单例模式的文章就介绍到这了,更多相关PHP单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:php的单例模式及应用场景详解PHP实现单例模式建立数据库连接的方法分析PHP设计模式之单例模式入门与应用详解php设计模式之单例模式用法经典示例分析PHP单例模式实例分析【防继承,防克隆操作】PHP设计模式之单例模式定义与用法分析PHP单例模式数据库连接类与页面静态化实现方法PHP中单例模式的使用场景与使用方法讲解PHP单例模式Singleton Pattern的原理与实现介绍

© 版权声明

相关文章