PHP单例模式如何设计?怎样与数据库连接?
Admin 2021-05-11 群英技术资讯 1409 次浏览
PHP单例模式是什么?使用单例模式有什么好处?很多人新手在学习PHP时,对于单例模式不是很理解,下面就给大家介绍一下关于php单例模式,以及我们要如何设计单例模式和建立数据库连接。
一、什么是单例
wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。
二、为什么用单例
实际项目中像数据库查询,日志输出,全局回调,统一校验等模块。这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能。这也就是单例存在的必要性。
三、单例模式的好处
1:减少频繁创建,节省了cpu。
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于数据库进行连接是新手学习要掌握的内容,上述示例具有一定的借鉴价值,有需要的朋友可以参考一下,希望对大家学习有帮助。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在laravel中,chunk()方法用于将集合分割为多个指定大小的较小集合,语法为“$指定集合->chunk(指定数量);”;该方法会对各个用户数据进行更新后再查看各个用户数据,这样在查询数据时没有获取大量数据,能够减轻系统的压力。
<html><head><title>杨辉三角形</title></head><body><p align="center">输出给定阶数的杨辉三角形</p><form method="post" action="&
在本文中,我会向你展示如何在 Laravel 中从头开始实现 repository 设计模式。我将使用 Laravel 5.8.3 版,但 Laravel 版本不是最重要的。在开始写代码之前,你需要了解一些关于 repository 设计模式的相关信息。
很多新手对于任务调度不是很清楚,简单介绍一下,任务调度指的是根据一定的约束规定,将CPU分配给符合条件的任务使用。这篇文章给大家分享的是关于PHP实现协程任务调度的实例,感兴趣的朋友可以了解一下。
一个integer是集合ℤ={...,-2,-1,0,1,2,...}中的一个数。语法整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(-或者+)。...
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008