植物百科网
当前位置: 首页 农业百科

php设计模式讲解(详解PHP中的三大经典模式)

时间:2023-05-23 作者: 小编 阅读量: 1 栏目名: 农业百科

单例模式使用的场景:1.数据库操作,减少对数据路的new操作,从而减少内存资源和系统资源的消耗。工厂模式的意义:通过使用工厂模式,减少因为多处new同一个类,当这个类发生变法时,则需要多处修改。存在则返回对象,不存在则创建对象并返回。工厂模式更多考虑的是扩展维护的问题。总的来说,单例模式和工厂模式可以产生更加合理的对象。而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因而,注册树模式应运而生。

php设计模式讲解?单例模式单例模式的含义:,我来为大家科普一下关于php设计模式讲解?以下内容希望对你有帮助!

php设计模式讲解

单例模式

单例模式的含义:

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的三个要素:

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

2. 构造函数和克隆函数必须是私有的,放在外部去实例化,这样就不存在单例模式的意义。

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

单例模式的意义:

在 PHP 中的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的 new 操作消耗的资源。而不完全是对系统资源的节省, 可以避免重复实例化,因为 PHP 每次实例化一个类之后都会清理掉对应的资源,当再次使用的时候又会在重新去实例化一次。

单例模式使用的场景:

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

2. 配置资源的共享,在一个系统中,配置资源都是全局的,使用单例模式也可以减少每次去读取配置带来的内存和系统资源的消耗。

代码演示:

<?php

class Single

{

public static $attribute = '';

public static $instance = '';

private function __construct($attribute = '个人技术')

{

self::$attribute = $attribute;

}

public static function getInstance($attribute = '我是编程浪子走四方1')

{

if (!(self::$instance instanceof self)) self::$instance = new self($attribute);

return self::$instance;

}

}

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

class Single {

public function index() {

return '';

}

}

$Single1 = new Single();

$single2 = new Single();

var_dump($single1);

var_dump($single2);

if ($single2 === $single1) {

echo "是同一个对象";

} else {

echo "不是同一个对象";

}

// object(Single)#1 (0) {

// }

// object(Single)#2 (0) {

// }

// 不是同一个对象

class single2 {

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

public static $instance;

//3. 将构函数私有化,避免外部new(每new一次,就不是同一个实例)

private function __construct() {

}

// 2.声明一个静态的公共方法,用户外部调用本类的实例

public static function getInstance() {

if (!(self::$instance instanceof self)) {

self::$instance = new self;

}

return self::$instance;

}

//3. 克隆函数私有化,避免外部clone(每clone一次,就不是同一个实例)

private function __clone() {

}

}

$singleDemo1 = Single2::getInstance();

$singleDemo2 = Single2::getInstance();

var_dump($singleDemo1->getInstance());

var_dump($singleDemo2->getInstance());

if ($singleDemo1 === $singleDemo2) {

echo "是同一个对象";

} else {

echo "不是同一个对象";

}

// object(Single2)#3 (0) {

// }

// object(Single2)#3 (0) {

// }

// 是同一个对象

工厂模式

工厂模式的有含义:

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

工厂模式的意义:

通过使用工厂模式,减少因为多处 new 同一个类,当这个类发生变法时,则需要多处修改。

代码演示:

<?php

class Factor

{

public static function createDB()

{

echo '我生产了一个DB实例';

return new DB;

}

}

class DB

{

public function __construct()

{

echo __CLASS__ . PHP_EOL;

}

}

$db = Factor::createDB();

注册树模式

注册数的含义:

注册树就是将多个对象注册在一个对象池中,当我们需要使用时,直接从对象池获取即可。

注册数模式的优点:

单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过 new 建立实例对象的方法。

那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。

首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。

每次创建实例对象都要存在这么一层判断。

工厂模式更多考虑的是扩展维护的问题。

总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?

而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因 而,注册树模式应运而生。

不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我 “插到” 注册树上。我用某个对象的时候,直接从注册树上取 一下就好。

这和我们使用全局变量一样的方便实用。 而且注册树模式还为其他模式提供了一种非常好的想法。

代码演示:

<?php

/**

* 单例模式

*/

class Single

{

public static $attribute = '';

public static $instance = '';

private function __construct($attribute = '个人技术')

{

self::$attribute = $attribute;

}

public static function getInstance($attribute = '个人技术1')

{

if (!(self::$instance instanceof self)) self::$instance = new self($attribute);

return self::$instance;

}

}

/**

* 工厂模式

*/

class Factory

{

public static function createObj()

{

return Single::getInstance('个人技术');

}

}

/**

* 注册模式

* 含义:就是将对象放在一个对象池中,使用的时候直接去对象池查找.

* 需要如下几个操作:

* 1.注册

* 2.存放对象池

* 3.获取

* 4.销毁

*/

Class Register

{

// 用一个数组来当做对象池,键当做对象别名,值存储具体对象

public static $objTree = [];

// 将对象放在对象池

public static function set($key, $val)

{

return self::$objTree[$key] = $val;

}

// 通过对象别名在对象池中获取到对象别名

public static function get($key)

{

return self::$objTree[$key];

}

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

public static function _unset($key)

{

unset(self::$objTree[$key]);

}

}

Register::set('single', Factory::createObj());

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

print_r($single);

echo $single::$attribute;

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。