封装 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”看里面到底出现了哪些错误信息,初始化的步骤就完成了。

相关文章
|
4月前
|
数据库
将连接数据库封装成类
在idea里将连接数据库封装成类
|
4月前
|
JSON Linux API
一个C++版本的Sqlite3封装--SmartDb
一个C++版本的Sqlite3封装--SmartDb
59 0
php实现接口的封装
php实现接口的封装
|
PHP 数据安全/隐私保护
PHP为什么一定要对类的属性进行初始化?底层原理是什么?
PHP为什么一定要对类的属性进行初始化?底层原理是什么?
152 0
|
PHP 开发者
封装 PDO(异常封装)|学习笔记
快速学习封装 PDO(异常封装)
封装 PDO(异常封装)|学习笔记
|
SQL 安全 关系型数据库
PDO 类基本应用|学习笔记
快速学习 PDO 类基本应用
PDO 类基本应用|学习笔记
|
SQL PHP 开发者
封装 PDO(读操作+测试)|学习笔记
快速学习封装 PDO(读操作+测试)
封装 PDO(读操作+测试)|学习笔记
|
关系型数据库 MySQL PHP
PDO 扩展|学习笔记
快速学习 PDO 扩展,掌握 PDO 扩展的加载
PDO 扩展|学习笔记
|
SQL PHP 开发者
封装 PDO(写操作)|学习笔记
快速学习封装 PDO(写操作)