分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

PHP单例模式简记

发布时间:2023-09-06 01:35责任编辑:熊小新关键词:PHP

单例模式:只能实例化一次即为单例模式

如何实现只能实例化一次:突破口在于类的构造函数,我们把构造方法变为隐私或者受保护的方法,然后执行代码

<?php ?Class Temp { ????protected function __construct () { ????} } $test = new Temp();

上面的代码执行会有如下报错

这样的话就不能实例化了,别人也不能随便的实例化它,但是我们自己应该如何实例化它呢?进一步修改代码

<?php ?Class Temp { ????protected function __construct () { ????} ????public static function getInstance () { ????????$test = new Temp(); ????????return $test; ????} } // $test = new Temp(); $test = Temp::getInstance(); var_dump($test);

运行代码,便可以得到一个对象

这说明我们已经成功的实例化了这个类,这说明我们成功的实例化了这个类。

但是这并没有达到我们要的目的,修改代码如下

<?php ?Class Temp { ????protected function __construct () { ????} ????public static function getInstance () { ????????$test = new Temp(); ????????return $test; ????} } // $test = new Temp(); $test1 = Temp::getInstance(); $test2 = Temp::getInstance(); $test3 = Temp::getInstance(); if ($test1 === $test2) { ????echo ‘同一个‘; } else { ????echo ‘不是同一个‘; }

执行代码

等到else的结果,这证明这是两个不一样的实例,也就是说我们并没有实现单例,继续修改代码如下

<?php ?Class Temp { ????protected function __construct () { ????} ????public static function getInstance () { ????????static $test; ????????if (empty($test)) { ????????????$test = new Temp(); ????????} ????????return $test; ????} } // $test = new Temp(); $test1 = Temp::getInstance(); $test2 = Temp::getInstance(); $test3 = Temp::getInstance(); if ($test1 === $test2) { ????echo ‘同一个‘; } else { ????echo ‘不是同一个‘; }

运行代码

这次获得的结果为条件成立的结果,证明这两个实例其实是同一个实例,到此我们便实现了我们的目的,这个类只会被实例化一次,此即为单例模式。

PHP单例模式简记

原文地址:https://www.cnblogs.com/cyclzdblog/p/PHP.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved