当前位置:首页 - 黄金城彩票靠谱吗 - 正文

君子好学,自强不息!

原标题:详细解释PHP中的三种经典模式

单例模式

单例模式的含义:

作为一种对象创建模式,单例模式确保一个类只有一个实例,并且实例化它自己,并将这个实例全局提供给整个系统。它不创建实例的副本,而是返回对存储在singleton类中的实例的引用。

单例模式的三个元素:

1.保存类的唯一实例的静态变量。

2.构造函数和克隆函数必须是私有的,并且在外部被取消实例化,所以单一模式没有任何意义。

3.提供一个外部可访问的公共静态方法,该方法返回类的唯一实例。

单例模式的含义:

PHP中的应用主要在于数据库应用,因此在一个应用中会有大量的数据库操作。当以面向对象的方式开发时,如果使用单例模式,可以避免大量新操作消耗的资源。然而,这并不完全是系统资源的节省,这可以避免重复实例化,因为PHP将在一次实例化一个类之后清理相应的资源,并且当它再次被使用时将再次取消实例化。

单例模式中使用的场景:

1.数据库操作,减少数据路径上的新操作,从而减少内存资源和系统资源的消耗。

2.配置资源共享。在系统中,配置资源是全局的。使用单一模式还可以减少每次读取配置所造成的内存和系统资源消耗。

代码演示:

<。?php

单班

{

公共静态$属性= ' ';

公共静态$ instance =

私有函数_ _构造($ attribute =' personal technology ')

{

self::$ attribute = $ attribute;

展开全文

}

公共静态函数实例($ attribute = '我是一个四处游荡的程序员')

{

如果(!(self::$ instance of self))self::$ instance =新self($ attribute);

返回自身::$实例;

}

}

单例模式和非单例模式的区别:

单班

公共职能指数

返回“”;

}

}

$single1 =新Single;

$single2 =新Single;

var _ dump(single 1);

var _ dump(single 2);

如果($ single 2 = = $ single 1){

回声“是同一物体”;

}其他{

回声“不是同一个对象”;

}

//对象(单一)#1 (0) {

// }

//对象(单一)#2 (0) {

// }

//不是同一个对象

Single2类

// 1。声明静态属性,用户保存类的实例

公共静态$实例;

//3。将构造函数私有化,避免外部新的(每个新的都不是同一个实例)

私有函数_ _构造{

}

// 2。声明静态公共方法,并从用户外部调用此类的实例

公共静态函数getInstance {

如果(!(self::$ instance of self)){

自我::$instance =新自我;

}

返回自身::$实例;

}

//3。克隆功能私有化以避免外部克隆(每个克隆都不是同一个实例)

私有函数_ _克隆{

}

}

$ SingleDemo 1 = Single 2::GetInstance;

$ SingleDemo 2 = Single 2::GetInstance;

var _ dump($ SingleDemo 1->;getInstance);

var _ dump($SingleDemo 2->;getInstance);

如果($singleDemo1 === $singleDemo2) {

回声“是同一物体”;

}其他{

回声“不是同一个对象”;

}

//对象(Single2)#3 (0) {

// }

//对象(Single2)#3 (0) {

// }

//是同一个对象

工厂模式

工厂模式的含义:

负责生成其他对象的方法。一个简单的描述是通过工厂类实例化其他类或方法。

工厂模式的含义:

通过使用工厂模式,减少了因为许多新类是相同的,当这个类改变时,需要许多修改。

代码演示:

<。?php

阶级因素

{

公共静态函数创建数据库

{

回声“我产生了一个数据库实例”;

返回新数据库;

}

}

数据库类

{

公共功能_ _构造

{

echo __CLASS__。PHP _ EOL

}

}

$db =因子::创建db;

注册树模式

注册号含义:

注册树用于在一个对象池中注册多个对象。当我们需要使用它时,我们可以直接从对象池中获得它。

注册号模式的优势:

单件模式解决了如何在整个项目中创建一个唯一的对象实例的问题,而工厂模式解决了如何在没有新实例的情况下创建一个实例对象的问题。

那么注册树模型想要解决什么问题呢?在考虑这个问题之前,我们仍然需要考虑前两个模型的当前局限性。

首先,单例模式创建唯一对象的过程有自己的判断,即对象是否存在。如果存在,则返回对象;如果不存在,则创建并返回对象。

每次创建实例对象时,都必须有这样一个判断级别。

工厂模式更关心扩展维护。

一般来说,单件模式和工厂模型可以产生更合理的对象。调用这些对象有多方便?

此外,项目中建立的对象就像散兵游勇,不便于进行全面的管理安排。因此,注册树模型应运而生。

无论您是通过单例模式、工厂模式还是两者的组合来生成对象,它们都被“插入”到注册树中。当我使用一个对象时,我只是直接从注册树中获取它。

这和使用全局变量一样方便实用。此外,注册树模式也为其他模式提供了一个非常好的想法。

代码演示:

<。?php

/**

*单一模式

*/

单班

{

公共静态$属性= ' ';

公共静态$ instance =

私有函数_ _构造($ attribute =' personal technology ')

{

self::$ attribute = $ attribute;

}

公共静态功能实例($ attribute = ' personal technology 1 ')

{

如果(!(self::$ instance of self))self::$ instance =新self($ attribute);

返回自身::$实例;

}

}

/**

*工厂型号

*/

班级工厂

{

公共静态函数createObj

{

返回Single::getInstance(“个人技术”);

}

}

/**

*注册模式

*含义:对象放在对象池中,使用时直接在对象池中搜索。

*需要以下操作:

* 1。登记

* 2。存储对象池

* 3。接近

* 4。破坏

*/

类别寄存器

{

//将数组用作对象池,将键用作对象别名,并将值用于存储特定对象

公共静态$ Objtree =[];

//将对象放在对象池中

公共静态函数集($key,$val)

{

返回自我::$ Objtree[$ key]= $ val;

}

//通过对象别名从对象池中获取对象别名

公共静态函数get($key)

{

返回自己::$ Objtree[$ key];

}

//通过对象别名从对象池中注销对象

公共静态函数_未设置($key)

{

取消设置(自我::$对象树[$键]);

}

}

寄存器::设置(“单一”,工厂::创建对象);

$ single = Register::get(' single ');

print _ r($single);

echo $ single::$属性;回到搜狐看更多

负责任的编辑:

这里是分享代码,在后台添加

本文来源:中富彩如何注册购彩票

本文地址:https://caizhucequiz.cn/post/36.html

关注我们:微信搜索“xiaoqihvlove”添加我为好友

版权声明:如无特别注明,转载请注明本文地址!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。


站点地图公益彩票 趣赢娱乐 彩票99记录数据分析 财神汇彩票 彩播 9188彩票是真的 rjdd.netfuyoudl.comchunshanyuan.com0598xy.comdlywxx.comwoaimeizi.comnimaboke.comlw-sh.comtaiwan.60bkcaipiao.cnapex.fanyicai.cn9d4q7.jiecaipiao.cngg.caipiaotong2020.cnlcs.1ctcaipiao.cn