开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:封装数据库操作类(优化)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12683
封装数据库操作类(优化)
内容介绍:
一、优化业务类操作简介
二、优化业务类操作代码详解及测试
三、确定类的控制简介
四、确定类的控制详解
一、优化业务类操作简介
用户在使用 SQL 类的时候,必须要进行第一步实例化、然后连接认证[调用 connect() ]和实现字符集置( 调用charset() ),才能完成真正的初始化。对于用户而言,这两步是必须做的,但好像又是累赘,用户并不了解这俩步的原因
用户使用 SQL 类希望实例化时就可完成初始化操作,然后就可做业务。
用户实例化 SQL 类就可以直接进行相应的业务处理:所以可以将连接认证、字符集设置在初始化方法中实现(在构造方法中调用激活),用户操作时会比较方便。
原因:因为构造方法会在实例化时,对象自动创建自动调用,所以该方法相当于已经运行,完成后用户之后的操作才有价值
二、优化业务类操作代码详解及测试
1.代码
#实现初始化数据库操作
public function _ construct(array $arr = []){
//先进行属性初始化后再进行调用初始化和字符集设置
#初始化:确保用户传入了数据,否则使用默认值
$this->host = $info['host'] ?? 'localhost';
$this->port = $info['port'] ?? '3306';
$this->user = $infg['user'] ?? 'root';
$this->pass = $info['pass'] ?? 'root';
$this->dbname = $info['dbname'] ?? 'db_2';
$this->charset = $info['charset'] ?? 'utf8';
#调用初始化和字符集设置
if(!$this->connect()) return;
$this->charset();
//charset()与 connect() 连接有关,connect() 可能操作结果不正确,而之后需要继续调用,只有连接资源的保证才可使 charset()方法得以运行,所以需要进行判定;如果执行失败返回结果 false ,则 return 打断当前执行,但 return 对构造方法无用,因为对象调用构造方法时,不需要返回值,对象并不会拿取返回值,所以 return 的作用只是打断当前执行(虽然 return 是返回值,但是此处无意义)
}
}
2.测试:
(1)代码:
#接上述代码(类外测试)
$s1 = new SqL();
#使用默认数据库信息
$db =array(
'host' => ' 192.168.0.1',
‘user ' => 'admin”,
‘pass’=>’admin ' ,
‘dbname' => ' T aobao '
);
$s2 = new SqL ($db)
;#使用外部数据库信息
/*$s1- >connect();
$s1->charset();*/
$res = $s1->read_all(‘desc t_40');
#$res = $s1->write("insert into t_40 values(null, 'name ','男',18,'classname ')");
echo $s1->errno,$s1->error ;
#echo $s1-> insert_ id();
Var_dump($res)
#观察有哪些字段
(2)解析
将下述俩行代码注释:
/*$s1- >connect();
$s1->charset();*/
停止查看 insert
#$res = $s1->write("insert into t_40 values(null, 'name ','男',18,'classname ')");
执行观察效果;发现效果相同,说明可以操作
但是对于用户而言,只是新建了一个对象(new SqL($db)),就可以直接使用$s1->read_all(),所以上述内容在做业务。
用户需要直接做自己的业务,因为初始化完成紧接着就是做业务。
三、确定类的控制简介
在学习完内容之后,发现类中有的在外部无用,有的在外部有用,但使用的都是 public,所以需要确定类的控制。
确定类的控制:不需要外部访问的私有,需要外部访问的公有,重要的数据私有化并增加公有的操作方法进行安全控制。
做起来较为复杂,因为那些类需要控制,都应进行业务规范,或者说需要开发人员有足够的经验是否需要公开或私有
四、确定类的代码讲解
#数据库初始化资源私有:不需要外部访问
private $host;
private $port;
private $user;
private $pass;
private $dbname ;
private $charset;
//属性需要私有化,因为都是内部使用,外部不用
private $link;
//连接资源仅限内部跨方法使用
Public $errno;
Public $error;
//需要外部使用,因为外部访问
private function connect(){}
private function charset(){}
//连接认证和字符集设置已经内部(构造方法)调用,完全自由化,不需要外部使用
private function check($sql){}
//SQL 检查属于内部(write(),read(),inset()做支撑)调用,不需要公有
因为在学习的过程中一直测试,无论是增删改查都可完成,所以测试结束之后将测试所写代码删除。SQL 类封装结束。
以后要使用引入该文件,实例化对象,按照所要的数据进行个性化的定制,就可以连接自己的数据库操作了。
然后讲的就是增删改查,受影响的行数,记录,对应的自增长 id。