美文网首页
一. PHP的23种设计模式之一 - 单例模式

一. PHP的23种设计模式之一 - 单例模式

作者: JensenXie | 来源:发表于2023-02-20 17:32 被阅读0次

    要了解单例模式之前,我们需要知道为什么需要单例模式,是什么使得单例模式的存在,它的给我们项目带来的好处是什么,带着疑问我们再去了解单例模式会更容易方便我们理解。

    在我们日常开发项目中,其实会用到很多PHP的框架,TP、Yii、laveral等等,其实他们在很多类文件中都用到了单例模式,在HTTP请求过来的时候,为了防止一个类(特别是大类,非常大的那种哈哈)被创建多次从而占用更多的内存空间(类大导致对象大),所以我们因此有了单例模式,解决了一个类被创建多次形成资源浪费的问题。

    以DB类为例,在最基础的写法中,如果在多次实例化DB类,会生成多个DB对象,这样看来明显是不可取的

    针对以上多个对象造成浪费资源的问题,我们可以进一步的优化它

    首先我们将类的构造函数私有化,防止其他人去实例化这个对象 我们私有化构造函数后,添加了一个公开对外的静态方法,使其保证或者该DB对象永远只有一个,但是出现了新的问题,当使用clone函数时,$db5和$db1是不相等的,相当于又多了一个DB对象,显然是不满足我们单例模式的初衷,所以我们要对clone操作做出限制 PHP提供了很多魔术方法,通常会以__开头,其中就有__clone魔术方法,我们可以定义把clone方法在类中定义为私有方法,在他人想要clone时,就会提示错误,因此避免了克隆导致会有多个类对象的问题

    写到这里单例模式基本就算是完成了,当然项目中多样性特别多,例如继承,是否需要使用final等,后面我会继续完善这篇文章,做到接近完整。

    最后抛出一个问题

    你们知道这两行代码的区别吗?

    相关文章

      网友评论

          本文标题:一. PHP的23种设计模式之一 - 单例模式

          本文链接:https://www.haomeiwen.com/subject/lwkgkdtx.html