封装 PDO (初始化)|学习笔记

简介: 快速学习封装 PDO (初始化)

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段封装 PDO (初始化)】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12744


封装 PDO (初始化)


1. 封装 PDO(初始化)

2. 如何进行一个具体的 PDO 初始化封装

3. 首先增加命名空间:并引入系统类(系统类不能自动跨全局空间进入到子空间)

(1) 命名空间:因为 PDO 通常属于核心类(项目中几乎每次都会访问数据库),使用核心关键字 core 命名 namespace core;

因为有了命名空间后,PDO 的三个类就属于全局空间的类,全局空间类在子空间里面是没有办法直接使用的,系统不会直接去找,所以需要使用完全限定名称访问,引入元素 PDO,\PDOstatement,\PDOException, 方便后续使用。

注:PDO 类封装要注意命名规范,例:MyPDO 这个类文件的名字

就应该叫做 MyPDO.php

# 这是基于 PDO 的二次封装

# 最开始要增加命名空间

namespace core;

# 其次引入系统类:基于 PDO 实现,需要引入三个类

use \PDO,\PDOStatement,\PDOException;

4. (引入后可进行类的定义)

5. 定义类:增加必要属性( PDO 对象)

Class MyPDO{

# 属性

Private $pdo;    // 保存 PDO 类对象

Private $fetch_model;   // 查询数据的模式:默认为关联数组

Public $error; }  // 记录的错误信息,可查询外部的运行是否错误

(有此步骤后下一步进行初始化对象,要保证项目的灵活,需从外部来传入数据或数组,且可以传入 PDO 的驱动,驱动就需要用到 PDO  相关的信息来传)

3.增加初始化方法:得到 PDO 对象:考虑参数的外部传入和默认值,数据较多可以采用关联数组(异常处理)

代码如下:

# 构造方法

# 默认采用 PDO 异常和获取关联数组设定

Public function_construct($database_info = array(),$drivers = array()){

# 如果要考虑细致,可看看是否存在

$type = $database_info['type'] ?? 'mysql';   // 默认 mysql 数据库
$host = $database_info['host'] ?? 'localhost';
$port = $database_info['port'] ?? '3306';
$user= $database_info['user'] ?? 'root';
$pass = $database_info['pass']?? 'root';
$dbname = $database_info['dbname'] ?? 'db_2';
$charset = $database_info['charset'] ?? 'utf8';

// 拿到 $database_info = arrary 信息后把它取出来,有“type”类型,“host”主机, “port”端口,“user”用户名,“pass”密码, “dbname”数据库名字,“charset”字符集;

有了这些信息后看有没有给默认值,如果没给就自己设定默认值,用运算符“??”来判定;有了初始化的必要信息后,还要考虑用户是否传了获取数据的一个模式。

# fetchmode 不能在初始化的时候实现,需要在得到PDOStatement 类对象后设置
$this->fetch_mode = $dirvers[PDO::ATTR_DEFAULT_FETCH_MODE] ?? PDO::FETCH_ASSOC;

// 这个模式是 PDO 系统自带的常量

PDO::ATTR_DEFAULT_FETCH_MODE,其实也是一个数值,如果给

了这个模式就用它,如若没有就默认用自己的模式

PDO::FETCH_ASSOC;fetch_mode 这是给属性赋值,赋值后开始

实现初始化

# 控制属性(增加异常处理)

If(!Isset($dirvers[PDO::ATTR_ERRMODE]))

$drivers[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

// 初始化前还需要看是否使用了异常模式“PDO::ATTR_ERRMODE”,如果没有使用就增加一个异常模式 PDO::ERRMODE_EXCEPTION,如果有就用想要的这种模式来实现

# 连接认证

Try{    

# 增加错误抑制符防止意外
$this->pdo = @new PDO($type . ':host=' . $host. ';port=' . $port . ';dbname='  .

$dbname . ';charset=' . $charset, $user, $pass,$drivers);
}catch(PDOException $e){
# 属性记录错误
$this->error['file'] = $e->getFile();
$this->error['line'] = $e->getLine();
$this->error['error'] = $e->getMessage();
# 返回 false,让外部处理
return false; } }

// 完成初始化也可以把“连接认证后的这一串代码”放到其他的方法中去实现;此处是直接验证,验证过程中有可能出错,所以进行一个“catch(PDOException”异常捕捉,这里要做的就是把“@new PDO($type . ':host=' . $host. ';port=' . $port . ';dbname='  .

$dbname . ';charset=' . $charset, $user, $pass,$drivers);
”实例化好的对象放到“$this->pdo”这个属性里面保存 PDO;但这个过程如果出现了错误,拼凑了数据,就把错误信息记录到“error”属性里面,然后返回一个“false”。

记录的信息有“file”文件名,“line”行号,“error”错误信息。

4.总结

以上就是我们第一个构造方法的封装,用来解决我们的初始化问题。里面主要是对属性进行了一个判定,一是初始化模式,二是对驱动进行一个判定,为了增加异常模式,一般用户不会传,所以我们就用异常模式来实现。

初始化用异常来捕捉,如果没有问题,属性保存我们的 PDO 对象,如果有问题,记录错误信息放到我们的“public $error”公有属性里,返回一个false。也就是当别人拿到我们当前这个 MyPDO 类对象发现不能操作的时候,应该来访问“public $error”看里面到底出现了哪些错误信息,初始化的步骤就完成了。

相关文章
|
存储 监控 安全
单点登录的安全性如何保证?有哪些常见的安全风险
单点登录的安全性如何保证?有哪些常见的安全风险
840 2
|
11月前
|
SQL PHP 数据库
19 PHP如何利用PDO获取结果集
路老师在知乎上分享了关于PHP语言的知识,帮助大家入门并深入了解PHP。本文介绍了PDO中获取结果集的三种方法:`fetch()`、`fetchAll()` 和 `fetchColumn()`,并通过具体案例展示了如何使用这些方法从数据库中获取数据并展示在网页上。
396 5
|
存储 缓存 Java
释放C盘空间:释放Windows休眠文件和关闭虚拟内存
在 Windows 11 专业版中,可以通过以下步骤来释放休眠文件(Hibernate File),以释放磁盘空间。休眠文件是系统休眠(Hibernate)功能所需要的文件,它保存了系统的当前状态,以便在休眠状态下恢复。如果你不使用休眠功能,如果因为C盘空间不足,可以考虑释放这个文件来腾出磁盘空间。
26130 1
|
Oracle IDE Java
IDEA安装教程配置java环境(超详细)
IDEA安装教程配置java环境(超详细)
6786 1
|
JSON 小程序 JavaScript
超详细微信小程序开发学习笔记,看完你也可以动手做微信小程序项目
这篇文章是一份全面的微信小程序开发学习笔记,涵盖了从小程序介绍、环境搭建、项目创建、开发者工具使用、文件结构、配置文件、模板语法、事件绑定、样式规范、组件使用、自定义组件开发到小程序生命周期管理等多个方面的详细教程和指南。
|
弹性计算 负载均衡 定位技术
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
阿里云服务器地域选择应考虑速度延迟、内网互通、价格差异和备案限制。建议用户根据所在地区就近选择,以减少网络延迟。同一地域内的产品可实现内网互通,不同地域间则无法跨地域部署负载均衡或使用内网连接。价格因地域而异,部分区域可能有优惠。此外,若需在中国内地进行网站经营性备案,需选择特定地域如北京或深圳。详细信息参考阿里云官方页面。
2650 5
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
67939 5
详解HTTP四种请求:POST、GET、DELETE、PUT
|
6天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
5天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知