php mysql 常用类库_PHP常用操作类实现——数据库操作类

概述

谢谢大家的收藏与赞,这是对我最大的鼓励。

这一系列文章主要是一些PHP常用的类操作,回顾一下面向对象,我一直致力于小白文章的撰写,因为我也是小白,相信有人需要,希望读者能够喜欢。

说明

关于PHP语言实现各种操作类,网上都能够找得到,但是质量参差不齐,有的代码不好懂,有时候看的眼花缭乱,所以我在这里统一作了一个整理(注意:是整理,每一种操作类,我至少会参考三份优秀代码,然后自己跑出来,而不是CV)

我会尽量遵守PSR规范,会有很详细易懂的注释

对于其中涉及到的相关知识点,比如设计模式,类型检测、浏览器架构、通信数据我也会简单讲讲,并留下相关链接,希望读者能够细嚼慢咽

阅读准备

内容涉及面向对象、数据库、文件操作、购物车、分页、图像处理、JSON数据接口,你可能需要有一点知识基础,当然,这些内容都是独立的,可以选择性的参看。

Source Code

/**

* TODO:数据库模型类

* Author:entner

* time: 2017-5-6

* version:1.0

*/

Class DB{

protected $HOST = '127.0.0.1'; //主机地址

protected $DATABASE;

protected $USER ="root"; //数据库用户名

protected $ROOT ="root"; //数据库用户密码

private static $resource; //数据库连接资源句柄

private static $instance; //静态变量保存类的唯一实例

/**

* 构造函数和克隆函数必须声明为私有的,防止外部获取

*/

private function __construct(){

echo "hello";

}

/**

* TODO:获取操作类实例

* 单例模式:只给一个入口

* static : 让连接静态化,不需要重复声明

*/

public static function getInstance(){

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

self::$instance = new self();

}

return self::$instance;

}

/**

* TODO:数据库连接

* @pagram $dbname string 数据库名称

*/

public function connect($dbname = "mail"){

$this->DATABASE = $dbname;

/* 判断数据库是否连接 */

if(!self::$resource){

self::$resource = mysqli_connect($this->HOST,$this->USER,$this->ROOT,$this->DATABASE);

/* 如果数据库连接失败 */

if(!self::$resource){

throw new Execption('mysql connect error'.mysqli_connect_error());

}

/* 设置编码 */

mysqli_query(self::$resource,"set names UTF8");

}

return self::$resource;

}

}

/**********Coding 1*********************

$res = DB::getInstance()->connect("base");

print_r($res);

die;

********************************/

/**********Coding 2*********************

$res = new DB();

$res::getInstance()->connect();

因为构造函数的私有性,这一句会产生fatal error 错误

********************************/

/**********Coding 3*********************

$a = DB::getInstance();

$a->connect();

$b = DB::getInstance();

$b->connect();

echo "

";

print_r($a);

print_r($b);

只会执行一次构造函数,说明$a $b是类的同一个实例

********************************/

解析

如果不看构造函数和getInstance方法,其实可以看的出来,实现数据库操作类很简单,只需要把数据库连接函数的参数当作类成员变量,然后调用就行了,但是这里用了一个简单的设计模式——单例模式,总之加上它,代码会更便捷、健壮,下面简单讲讲。

为什么使用单例模式?

其实从技术上考虑主要是考虑节省内存资源(因为访问数据库的话我们实例一次就够了,不需要重复实例[2019.5.28 update]),提升系统性能,但实际能够感受到的就是更方便,而且逼格高一些,所以用它。

什么是单例模式?

举个例子,就是大楼只有一个入口,方便控制,用面向对象来说,就是一个类只有一个实例,方便管理。

代码部分是怎么实现单例模式的?

首先声明一个私有构造函数,这样就不能在外面使用 new 来实例化多个对象了,你可以用coding 2的代码试一试,会报错

构造一个公共入口来获取类的实例,总的有实例可用撒,注意这个self指的是当前类,instanceof是检查当前变量是否为类的实例

如何检查单例效果?

你可以用coding 3的代码查看输出结果,然后你会发现构造函数只执行了一次,说明,第一次实例化对象之后,后面的变量对对象的引用是一致的,说明实例实际上只有一个。

为什么getInstance方法是静态的呢?

函数也是变量,静态化变量,不管引用多少次,都不会重复生成,比较节省空间,这里并不考虑多线程的问题。

参考链接

结语

有没懂的或者又觉得不对的,欢迎大家留言。

最后

我会把源代码放在GitHub主页上,别担心,是中文,有需要的可以访问下载.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值