PHP实现单例模式建立数据库连接的方法分析

来源:脚本之家  责任编辑:小易  

可以写的。 希望我的回答可以帮到你,有什么不懂可以追问。

本文实例讲述了PHP实现单例模式建立数据库连接的方法。分享给大家供大家参考,具体如下:

PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会

理解php单例模式

单例模式是一种常用的软件设计模式,可以保证系统中一个类只有一个实例,从而达到节约系统资源提升特殊类使用效率的目的 php实现单例模式的方法 class A { //静态属性 private static $_instance; //空的克隆方法,防止被克隆 private function

一、什么是单例

单例的作用是保证在类被调用的时候只被实例化一次 并且每次调用的都是该被实例化的类 作用可以思考,一个数据库链接,在一次访问中只需要一个数据库链接,并不应该产生多个数据库链接 实现的方式是通过声明一个静态变量,用来存储唯一的实例化对

wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

单例模式确保某个类只有一个实例 1.只能有一个实例。 2.必须自行创建这个实例。 3.必须给其他对象提供这一实例。 那么为什么要使用PHP单例模式? PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作

二、为什么用单例

谢邀。首先说一下王者荣耀的评分系统,根据你的击杀数,被杀数,助攻数还有参团率等一系列因素给你的评分。首先这个分数在有些情况下是很不合理的。举个栗子,李元芳打野很强,抢大龙小龙很快,偷到主宰对团队的贡献很大吧,但是在最后评分无法体现。通常两边正常打不送不放水的情况下两波主宰会推掉对面两三座塔甚至更多,但是这在评分上没有体现。所以分数只是一个参考,高分并不代表厉害,低分也并不代表很坑,我用猴子在劣势的情况下死了六次偷了对面的水晶因为被杀数太多所以评分最低这样公平吗?很明显不公平。所以,不能一分定论。再说举报系统。举报系统在一些情况下还算准确,但情况仅限于队友挂机。如果系统提示队友退出游戏并且很长时

实际项目中像数据库查询,日志输出,全局回调,统一校验等模块。这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能。这也就是单例存在的必要性。

简单而言,离合就是一种连接装置,能起到分离或者联合“发动机与变速箱之间“的作用,请关注:容济点火器离合器安装在发动机曲轴和变速器之间,它的作用是使发动机与变速器能够平稳接合,将动力传到变速器。摩托车在起步前,虽然发动机已运转,但传动部件以及整车都处于静止状态,如果将转速比较高的发动机扭矩一下子传给传动装置,将导致摩托车突然向前冲,会使发动机因负荷突然增大而熄火,并可能使各机件受到严重的冲击而损坏。所以在摩托车传动系统中安装离合器,使摩托车起步时,将发动机动力较平稳的传递给传动部件。在不需要动力时,使发动机与变速器之间的连接迅速分离,使发动机动力不传到变速器。在行驶中,因道路及交通状况,常需要不

三、单例模式的好处

几个出生和智力关系没有太大关系!人的总体智力水平都没有什么太大区别,区别在于学习习惯和心理成熟度!为什么说9月-4月的孩子会在以后更容易学习好呢,因为我国上幼儿园上小学时间规定在9月1号出生以后的孩子。所以出生在9月的孩子比出生在8月的孩子,早了快一年进入幼儿园!可想而知孩子的一年差距会很明显,孩子小一岁区别会差很多,这就是为什么有的孩子刚上幼儿园就很适应就会自己穿衣服,有的等到中班才会!这当然也和家庭教育和父母遗传有关系。我所说的都是在相同外在条件下的。孩子在幼儿园能越早进去状态越好,幼儿园不光是学习知识的地方,幼儿园是让孩子培养好习惯融入社会学习与人相处的地方。有些孩子7、8月出生但是在家

1:减少频繁创建,节省了cpu。

牛肉是指从牛身上得出的肉,为常见的肉品之一。但是有些人说吃了牛肉容易流鼻血,那么平时应该注意什么呢?首先主要考虑上火所致,目前可以采取去火药物治疗,其次平时多饮水,饮食要以清淡为主,不要吃刺激性食物。可考虑食疗去火,用白糖梨,食其汁肉。也可将新鲜的梨去皮,剖开去核,加入适量冰糖,放入锅中隔水蒸软即可食用。其次引起鼻出血的原因很多,需要进一步检查是不是鼻中隔偏曲,干燥性鼻炎,萎缩性鼻炎,鼻腔异物。另外检查是不是血液疾病如血小板量或质的异常,凝血机制的异常。治疗首先查明出血点,点涂50%硝酸银或三氯醋酸利用其蛋白凝固作用使破裂的小血管封闭也可电灼该部或者应用激光或冷冻治疗。另外也可以鼻内窥镜下电灼

2:静态对象公用,节省了内存。

3:功能解耦,代码已维护。

四、如何设计单例

通过上面的描述,单例的核心是,实例一次生成,全局唯一,多次调用。因此在单例模式必须包含三要素:

1:私有化构造函数,私有化clone。也就是不能new,不能clone。【唯一】

2:拥有一个静态变量,用于保存当前的类。【唯一如何保存】

3:提供一个公共的访问入口。【可以访问】

五、建立数据库连接

PS:功能上不太完整,以后再补充**__**

/** * 单例模式连接数据库--面向对象 * */ //final关键字阻止此类被继承 final class sql2 { static $instance; static $connect; protected $result; //protected关键字阻止此类在外部进行实例化 protected function __construct($host, $user, $password) { self::$connect = @new mysqli($host, $user, $password); if (self::$connect->connect_errno) { die(iconv('gbk', 'utf-8', self::$connect->connect_error) . '(' . self::$connect->connect_errno . ')'); } } //protected关键字阻止此类在外部进行克隆 protected function __clone() { } //当对象被销毁时关闭连接 function __destruct() { self::$connect->close(); } //获取实例 static function getInstance($host, $user, $password) { self::$instance = self::$instance ?: new self($host, $user, $password); return self::$instance; } //选择数据库 function set_db($db) { if (!self::$connect->select_db($db)) { die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')'); } } //执行SQL语句 function query($query) { if (!($re = self::$connect->query($query))) { die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')'); } $this->result = $re; return $re; } //以数组形式返回查询结果 function fetch_arr($query) { $re = $this->query($query); $res = []; while ($row = $re->fetch_assoc()) { $res[] = $row; } return $res; } //获取记录数 function get_row() { return $this->result->num_rows; } } $ins = sql2::getInstance('127.0.0.1', 'root', 'root'); $ins->set_db('houtai'); $re = $ins->fetch_arr('select * from user '); //var_dump($re); $ins->get_row();

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

php pconnect与单例模式连接数据库,怎样才能最高性能的连接数据库

php pconnect与单例模式连接数据库:

在php层面,无论你怎么写代码,都是半斤八两,没啥区别。我来强调下长连接和普通链接的区别:

永久链接并不是说,服务器打开了一个连接,然后所有的人都共享这个链接。永久连接一样是每个客户端来就打开一个连接,有200人访问就有200个连接。其 实mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在php运行结束后不主动close掉mysql的连接.

在php经cgi方式运行时pconnect和connect是基本没有区别的, 因为cgi方式是每一个php访问起一个进程, 访问结束后进程也就结束了, 资源也全释放了. 当php以apache模块方式运行时, 由于apache有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql连接资源不被释放, 于是有下一个连接请求时就可以被复用.这就使得在apache并发访问量不大的时候, 由于使用了pconnect, php节省了反复连接db的时间, 使得访问速度加快. 这应该是比较好理解的. 但是在apache并发访问量大的时候, 如果使用pconnect, 会由于之前的一些httpd进程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些请求永远得不到满足.若mysql最大连接数设为500, 而apache的最大同时访问数设为2000,假设所有访问都会要求访问db, 而且操作时间会比较长,当前500个请求的httpd都没有结束的时候,之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接 数). 只有当前500个httpd进程结束或被复用才可以连接得到了mysql

当db操作复杂, 耗时较长时, 因httpd会fork很多并发进程处理, 而先产生的httpd进程不释放db连接, 使得后产生的httpd进程无法连上db. 因为这样没有复用其它httpd进程的mysql连接. 于是会就产生很多连接超时。 在并发访问量不高时,使用pconnect可以简单提高访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了.

php对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的进程池来用, 所以在并发访问量大的时候pconnect并不能很好的提高访问db效率.

在实际的应用中,用mysql_pconnect的话,每次刷新和请求新的页面都比较快,而用mysql_connect的话,每次刷新都要重新请求,当数据库连接比较慢的时候,就能看出差异了。当你的数据库连接比较慢,DB操作不是很复杂,并且你对自己的程序足够自信,不会产生死锁的时候,且你对服务器有控制权的话,满足以上四个条件中的任意两个,那么就可以用 pconnect。

pconnect不用在脚本里关闭,可以在mysql中设置lifetime,也可以写shell定期扫描,kill掉休眠过长的连接。 一句话总结:要用好pconnect,不仅仅是php脚本的事 还关系到数据库和服务器的设置。

单例模式 数据库 php 怎么用

搭建好php开发环境,这个就不多讲了,能找单例模式的应该有一定的php基础

2

新建一个database.php文件存放数据库信息

<?php

$db = array(

'host'=>'localhost',//地址

'user'=>'root',//数据库用户名

'password'=>'root',//数据库密码

'database'=>'ceshi',//数据库名

)

?>

3

新建Mysql.class.php编写数据库连接类操作类添加需要的属性和构造方法

构造函数加载数据库配置文件连接数据库

<?php

class db {

public $conn;

public static $sql;

public static $instance=null;

private function __construct(){

require_once('database.php');

$this->conn = mysqli_connect($db['host'],$db['user'],$db['password']);

if(!mysqli_select_db($this->conn,$db['database'])){

echo "失败";

};

mysqli_query($this->conn,'set names utf8');

}

}

?>这样试试吧如果你对php这类有兴趣的话,可以和我一样在后盾人经常看看教材,自己多看几遍,慢慢的以后就明白了,希望能帮到你,给个采纳吧谢谢

php pdo单例模式怎么同时连接两个数据库

PHP pdo单例模式连接数据库

';

if ( self::$pdo == null )

{

$host = '115.29.223.160';

$user = 'zhangwei';

$pwd = 'zhang111';

$dbname = 'wangzhan';

$dsn = "mysql:host=$host;dbname=$dbname;port=3306";

$pdo = new PDO ( $dsn, $user, $pwd );

$pdo->query('set names utf8;');

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

self::$pdo = $pdo;

}

return self::$pdo;

}

public static function getStmt ( $sql )

{

$pdo = self::getPdo ();

return $pdo -> prepare( $sql );

}

}

$sql = "INSERT INTO testss (wef,wef1) VALUES(?,?)";

$stmt = Db::getStmt ( $sql );

$stmt = Db::getStmt ( $sql );

?>

输出结果

NULL

object(PDO)#1 (0) { }

第一次null 第二次再获取就已经有了 不用重新连接了

单利模式好处就是保存变量 他是用static保存的 所以 退出函数 变量不会释放

关于这个问题,差不多就是这个样子的了,你如果不明白,可以自己去后盾瞅瞅,我这些都是在后盾上学的,有空可以去看一下,就算不喜欢也没关系啊,何乐而不为呢?

怎么用php实现单例模式

类内使用方法,类似

public static function getInstance($class_name){

if(! isset(static::$classList[$class_name])){

static::$classList[$class_name] = new $class_name;

}

return static::$classList[$class_name];

}

实例化

(className)::getInstance($class_name);

php如何实现单例模式

类的单例模式:

class Single

{

public $rand;

static public $ob;

protected function __construct(){

$this->rand = mt_rand(1000, 99999);

}

static public function getIns(){

if(!Single::$ob){

Single::$ob = new Single();

}

return Single::$ob;

}

}

v(Single::getIns());

v(Single::getIns());

  • 本文相关:
  • php单例模式数据库连接类与页面静态化实现方法
  • php中数据库单例模式的实现代码分享
  • php基于单例模式实现的数据库操作基类
  • php单例模式应用示例【多次连接数据库只实例化一次】
  • php实现单例模式最安全的做法
  • php单例模式的简单实现方法
  • php利用单例模式实现日志处理类库
  • php基于单例模式编写pdo类的方法
  • php最常用的2种设计模式工厂模式和单例模式介绍
  • php设计模式之工厂模式与单例模式
  • php自动生成表单代码分享
  • 从php核心代码分析require和include的区别
  • php实现时间轴函数代码
  • zend api扩展的php对象的autoload工具
  • php中全局变量global的使用演示代码
  • php获取ip的三个属性区别介绍(http_x_forwarded_for,http_via,re
  • 在同一窗体中使用php来处理多个提交任务
  • 解析php中的内存管理,php动态分配和释放内存
  • php源码分析之dzx1.5字符串截断函数cutstr用法
  • php文件缓存方法总结
  • php pconnect与单例模式连接数据库,怎样才能最高...
  • 单例模式 数据库 php 怎么用
  • php pdo单例模式怎么同时连接两个数据库
  • 怎么用php实现单例模式
  • php如何实现单例模式
  • (PHP)题目描述:请用单例模式定义一个访问数据库的...
  • 什么是PHP单例模式
  • php 单例模式
  • php 单例模式 不明白$ins 是什么意思 没理解了在单...
  • PHP为什么以及什么时候使用单例模式
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved