广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中单例模式的示例分析
  • 139
分享到

PHP中单例模式的示例分析

2023-06-20 12:06:07 139人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关PHP中单例模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是单例模式?含义     作为对象的创建模式,单例模式确保某一个类

这篇文章将为大家详细讲解有关PHP中单例模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、什么是单例模式?

含义   

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

单例模式的三个要点:

(1). 需要一个保存类的唯一实例的静态成员变量:

private static $_instance;

(2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义:

private function __construct() {     $this->_db = pg_connect('xxxx');} private function __clone(){}//覆盖__clone()方法,禁止克隆

(3). 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用

    public static function getInstance()      {          if(! (self::$_instance instanceof self) )         {              self::$_instance = new self();          }        return self::$_instance;      }

二、为什么要使用单例模式?

php缺点:        

       PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。

单例模式在PHP中的应用场合:

(1)、应用程序与数据库交互

       一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。

(2)、控制配置信息

       如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.

三、如何实现单例模式?

普通的数据库访问例子:

<?php......//初始化一个数据库句柄$db = new DB(...);//添加用户信息$db->addUserInfo(...);......//在函数中访问数据库,查找用户信息function getUserInfo(){    $db = new DB(...);//再次new 数据库类,和数据库建立连接    $db = query(....);//根据查询语句访问数据库}?>

应用单例模式对数据库进行操作:

<?phpclass DB  {      private $_db;      private static $_instance;        private function __construct(...)      {          $this->_db = pg_connect(...);//postgrsql      }        private function __clone() {};  //覆盖__clone()方法,禁止克隆        public static function getInstance()      {          if(! (self::$_instance instanceof self) ) {              self::$_instance = new self();          }          return self::$_instance;      }            public function addUserInfo(...)    {       }     public function getUserInfo(...)    {     }}//test$db = DB::getInstance();$db->addUserInfo(...);$db->getUserInfo(...);?>

深入理解

<?phpclass db {public $conn;public static $sql;public static $instance=null;private function __construct(){require_once('db.config.php');$this->conn = mysql_connect($db['host'],$db['user'],$db['passWord']);if(!Mysql_select_db($db['database'],$this->conn)){echo "失败";};mysql_query('set names utf8',$this->conn);}public static function getInstance(){if(is_null(self::$instance)){self::$instance = new db;}return self::$instance;}public function select($table,$condition=array(),$field = array()){$where='';if(!empty($condition)){foreach($condition as $k=>$v){$where.=$k."='".$v."' and ";}$where='where '.$where .'1=1';}$fieldstr = '';if(!empty($field)){foreach($field as $k=>$v){$fieldstr.= $v.',';} $fieldstr = rtrim($fieldstr,',');}else{$fieldstr = '*';}self::$sql = "select {$fieldstr} from {$table} {$where}";$result=mysql_query(self::$sql,$this->conn);$resuleRow = array();$i = 0;while($row=mysql_fetch_assoc($result)){foreach($row as $k=>$v){$resuleRow[$i][$k] = $v;}$i++;}return $resuleRow;} public function insert($table,$data){ $values = ''; $datas = ''; foreach($data as $k=>$v){ $values.=$k.','; $datas.="'$v'".','; } $values = rtrim($values,','); $datas   = rtrim($datas,','); self::$sql = "INSERT INTO  {$table} ({$values}) VALUES ({$datas})";if(mysql_query(self::$sql)){return mysql_insert_id();}else{return false;}; } public function update($table,$data,$condition=array()){$where='';if(!empty($condition)){foreach($condition as $k=>$v){$where.=$k."='".$v."' and ";}$where='where '.$where .'1=1';}$updatastr = '';if(!empty($data)){foreach($data as $k=>$v){$updatastr.= $k."='".$v."',";}$updatastr = 'set '.rtrim($updatastr,',');}self::$sql = "update {$table} {$updatastr} {$where}";return mysql_query(self::$sql);} public function delete($table,$condition){ $where='';if(!empty($condition)){foreach($condition as $k=>$v){$where.=$k."='".$v."' and ";}$where='where '.$where .'1=1';}self::$sql = "delete from {$table} {$where}";return mysql_query(self::$sql); }public static function getLastSql(){echo self::$sql;}}$db = db::getInstance();//$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password'));//echo $db->insert('demo',array('name'=>'最近你啦','password'=>'123'));//echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));echo $db->delete('demo',array('id'=>'2'));db::getLastSql();echo "<pre>";?>

关于“PHP中单例模式的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: PHP中单例模式的示例分析

本文链接: https://www.lsjlt.com/news/296614.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中单例模式的示例分析
    这篇文章将为大家详细讲解有关PHP中单例模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是单例模式?含义     作为对象的创建模式,单例模式确保某一个类...
    99+
    2023-06-20
  • java单例模式的示例分析
    这篇文章主要介绍了java单例模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定义:      &nb...
    99+
    2023-05-30
    java
  • C#单例模式的示例分析
    这篇文章给大家分享的是有关C#单例模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。单例模式也是创建型模式的一种,也是23种设计模式中比较简单的一种。见名思意,在整个软件系统中,只有某个类型的一个对象,...
    99+
    2023-06-29
  • web前端中单例模式的示例分析
    小编给大家分享一下web前端中单例模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单例模式(Singleton Pa...
    99+
    2022-10-19
  • Java中单例模式与多线程的示例分析
    这篇文章主要介绍了Java中单例模式与多线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单例模式与多线程单例模式就是全局唯一但是所有程序都可以使用的对象写单例模式...
    99+
    2023-06-20
  • PHP中命令模式的示例分析
    这篇文章主要介绍PHP中命令模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际...
    99+
    2023-06-20
  • PHP中原型模式的示例分析
    这篇文章将为大家详细讲解有关PHP中原型模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。原型模式其实更形象的来说应该叫克隆模式。它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原...
    99+
    2023-06-20
  • Java中的单例模式实例分析
    本篇内容介绍了“Java中的单例模式实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、定义单例模式(Singleton Patter...
    99+
    2023-06-29
  • PHP设计模式的示例分析
    这篇文章将为大家详细讲解有关PHP设计模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。               &nb...
    99+
    2023-06-15
  • PHP中模板方法模式的示例分析
    小编给大家分享一下PHP中模板方法模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!模板方法模式,也是我们经常会在不经意间有会用到的模式之一。这个模式是...
    99+
    2023-06-20
  • 分析Java中的单例模式
    本篇内容主要讲解“分析Java中的单例模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Java中的单例模式”吧!WHAT维基百科给出了解释、实现的思路以及应该注意的地方:单例模式,也叫单子...
    99+
    2023-06-25
  • JAVA的单例模式实例分析
    这篇文章主要介绍“JAVA的单例模式实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JAVA的单例模式实例分析”文章能帮助大家解决问题。一、单例模式是什么?单例(Singleton)模式的定义...
    99+
    2023-06-29
  • C++单例模式实例分析
    本篇内容介绍了“C++单例模式实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不能被拷贝的类拷贝只会放生在两个场景中:拷贝构造函数以及...
    99+
    2023-06-29
  • PHP中装饰器模式的示例分析
    这篇文章主要介绍了PHP中装饰器模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Gof类图及解释GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapt...
    99+
    2023-06-20
  • Java单例模式分析
    目录单例模式为什么要用单例单例的关键点几种写法懒汉式饿汉式静态内部类写法枚举单例容器实现单例参考总结单例模式 为什么要用单例 确保某个类只有一个对象,常用于访问数据库操作,服务的配置...
    99+
    2022-11-12
  • Java设计模式的单例模式实例分析
    本文小编为大家详细介绍“Java设计模式的单例模式实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式的单例模式实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是单例模式单例模式(S...
    99+
    2023-06-29
  • 用实例分析Java单例模式
    这篇文章主要用实例分析Java单例模式,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。本文实例讲述了Java单例模式。分享给大家供大家参考,具体如下:在实际开发的时候会有一些需求,在某个类中只能...
    99+
    2023-05-31
    java 单例模式 ava
  • HTML5中History模式的示例分析
    这篇文章给大家分享的是有关HTML5中History模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近看到vue-router的HTML5 History 模式路由...
    99+
    2022-10-19
  • javascript中Strict模式的示例分析
    这篇文章主要介绍了javascript中Strict模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介在ES5中,引入了strict模式,我们可以称之为严格模式...
    99+
    2023-06-15
  • JavaScript模块模式的示例分析
    这篇文章主要介绍了JavaScript模块模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:在JS中没有Class的概念...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作