本次作业主要包含创建私有属性,通过创建对外访问的公共接口进行访问私有属性值(理解private类私有属性关键字,__get(),__set()方法应用);数据库的连接和常用增删查改操作方法
实例一创建私有属性,通过创建对外访问的公共接口进行访问私有属性值
<?php class car { //创建私有属性,通过创建对外访问的公共接口进行访问私有属性值 private $brand; private $price; private $size = []; private $data =[];//属性收集器 // 类中用双下划线的方法是系统定义,由系统自动调用,叫魔术方法 public function __construct($brand,$price,array $size)//声明构造方法:对象属性初始化,在类实例化的时候自动调用__construct(){},参数为必选 { $this -> brand = $brand; $this -> price = $price; $this -> size = $size; } public function __get($name)//获取__get(){},创建对外访问的公共接口 { // TODO: Implement __get() method. $msg = null; if (isset($this->$name)) {//判断属性是否存在 $msg = $this->$name; } elseif (isset($this->data[$name])) {//判断属性是否在收集器中 $msg = $this->data[$name]; } else { $msg = '属性不存在'; } return $msg; } public function __set($name, $value)//设置__set(){} { // TODO: Implement __set() method. $this -> $name = $value; } }//__get($name)与__set($name,$value)中的$name $value均为函数中特指参数,并非类car中成员变量 //require car.php,为方便作业提交写入一个文档中 $car = new car('BMW',300000,['3m','2m','2m']);//实例化创建对象并传入必选参数 echo $car -> brand,'<br>'; echo $car -> price,'<br>'; echo var_export($car -> size),'<br>'; $car -> price = 200000;//通过__set接口实现改变对象属性值price echo $car -> price,'<br>'; $car -> size = ['5m','3m','2m'];//通过__set接口实现改变对象属性值size echo $car -> size[1]; echo '<hr>'; class admin { private $user; private $password; public function __construct($user,$password)//声明构造方法 { $this -> user = $user; $this -> password = $password; } public function __get($name)//__get(){},创建对外访问的公共接口 { // TODO: Implement __get() method. return $this -> $name; } public function __set($name, $value) { // TODO: Implement __set() method. $this -> $name = $value; } }//__get($name)与__set($name,$value)中的$name $value均为函数中特指参数,并非类admin中成员变量 $admin = new admin('Suyh','111111'); echo $admin -> user,'<br>'; echo $admin -> password,'<br>'; $admin -> user = '张三'; echo $admin -> user,'<br>'; echo '<hr>'; class animal { private $a1; private $weight; public function __construct($a1,$weight)//声明构造方法 { $this -> a1 = $a1; $this -> weight = $weight; } public function __get($name)//__get(){},创建对外访问的公共接口 { // TODO: Implement __get() method. if(isset($this -> $name)) { return $this -> $name; }else{ return '属性为空'; } } public function __set($name, $value) { // TODO: Implement __set() method. $this -> $name = $value; } }//__get($name)与__set($name,$value)中的$name $value均为函数中特指参数,并非类animal中成员变量 $animal = new animal('Dog','30kg'); echo $animal -> a1,'<br>'; echo $animal -> weight,'<br>'; $animal -> a1 = 'sheep'; echo $animal -> a1,'<br>'; $animal -> weight = '40kg'; echo $animal -> weight,'<br>'; echo '<hr>'; class company { private $name; private $asset; private $B_i = []; public function __construct($name,$asset,array $B_i)//声明构造方法 { $this ->name = $name; $this -> asset = $asset; $this -> B_i = $B_i; } public function __get($name)//__get(){},创建对外访问的公共接口 { // TODO: Implement __get() method. return $this -> $name; } public function __set($name, $value) { // TODO: Implement __set() method. $this -> $name = $value; } }//__get($name)与__set($name,$value)中的$name $value均为函数中特指参数,并非类company中成员变量 $company = new company('php中文网','1000万',['a' => 100,'b' => 1000,'c' => 10000]); echo '企业名称:',$company -> name,'<br>'; echo '企业资产:',$company -> asset,'<br>'; echo '工商信息:<pre>',var_export($company -> B_i,true),'<br>'; $company -> B_i =['d' => 'php','e' => 'www.php.cn','f' => '2018年']; echo '工商信息:<pre>',var_export($company -> B_i,true),'<br>'; echo '<hr>'; class course { private $c1; private $content = []; public function __construct($c1,$content)//声明构造方法 { $this -> c1 = $c1; $this -> content = $content; } public function __get($name)//__get(){},创建对外访问的公共接口 { // TODO: Implement __get() method. return $this -> $name; } public function __set($name, $value) { // TODO: Implement __set() method. $this -> $name = $value; } }//__get($name)与__set($name,$value)中的$name $value均为函数中特指参数,并非类course中成员变量 $course = new course('HTML',['语法','标签及其属性']); echo '课程:',$course -> c1,'<br>'; echo '内容:',var_export($course -> content,true),'<br>'; $course -> c1 = 'CSS'; echo '课程:',$course -> c1,'<br>'; $course -> content = ['基本语法','常用选择器','盒子模型']; echo '内容:',var_export($course -> content,true),'<br>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
本地运行效果截图:
实例二数据库连接
<?php require 'config.php';//连接数据库配置文件 $mysqli = new mysqli($db['host'],$db['user'],$db['pass'],$db['name']);//创建数据库连接,并返回mysqli对象 $mysqli->set_charset($db['charset']);//设置数据库默认字符集 //检测数据库连接 if ($mysqli->connect_errno) {//数据库连接错误编号 die('连接错误'.$mysqli->connect_errno.': '. $mysqli->connect_error);//返回错误提示信息 } //echo '连接成功'; /* * * require 'config.php';//连接数据库配置文件 $mysqli = new mysqli($db['host'],$db['user'],$db['pass'],$db['name']); $mysqli -> set_charset($db['charset']); if ($mysqli -> connect_errno){ die('连接错误'.$mysqli->connect_errno.': '. $mysqli->connect_error);//返回错误提示信息 } echo '连接成功';*/ /*以变量形式创建数据库连接配置文件 $db_host = '127.0.0.1';//连接地址 $db_user = 'root';//用户名 $db_pass = 'root';//密码 $db_name = 'php';//数据库名 $db_charset = 'utf8';//字符集 $mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);//创建数据库连接,并返回mysqli对象 $mysqli->set_charset($db_charset);//设置数据库默认字符集 if ($mysqli->connect_errno) {//数据库连接错误编号 die('连接错误'.$mysqli->connect_errno.': '. $mysqli->connect_error);//返回错误提示信息 } echo '连接成功'; */ /*直接将连接参数传入mysqli对象中 * $mysqli = new mysqli('127.0.0.1','root','root','php');//创建数据库连接,并返回mysqli对象 $mysqli->set_charset('utf8');//设置数据库默认字符集 if ($mysqli->connect_errno) {//数据库连接错误编号 die('连接错误'.$mysqli->connect_errno.': '. $mysqli->connect_error);//返回错误提示信息 } echo '连接成功';*/ /* * $dbhost = '127.0.0.1';//连接地址 $dbuser = 'root';//用户名 $dbpass = 'root';//密码 $dbname = 'php';//数据库名 $dbcharset = 'utf8';//字符集 $mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname); $mysqli->set_charset($dbcharset);//设置数据库默认字符集 if ($mysqli -> connect_errno){ die('连接错误'.$mysqli->connect_errno.':'.$mysqli -> connect_error); } echo '连接成功'; //注释部分均测试连接成功 */
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例三Mysql新增数据
<?php require '082902.php';//引入连接数据库的文件 //准备SQL语句:带有占位符(可以有效防止sql注入提高安全性) /*$sql = "INSERT IGNORE `staff` SET `name` = ?,`salary` = ?;";//语句为新增设置表`staff`的name和salary两个字段的数据 //创建一个sql语句预处理对象 $fz = $mysqli -> prepare($sql);//创建欲处理对象fz //参数绑定:用数组数据来绑定准备好的sql语句的占位符 $name = 'Su6'; $salary = '999'; $fz -> bind_param('si',$name,$salary);//绑定参数,bind_param(类型,参数...),类型s表示字符串,i表示整型 //执行新增的SQL语句 if ($fz->execute()) {//execute()执行$fz if ($fz->affected_rows > 0) {//如果受影响数据行>0,affected_rows echo '<br>成功的插入'.$fz->affected_rows.' 条记录,新增记录的主键id是: ' . $fz->insert_id; } else { echo '<br>没有新增记录'; } } else { exit($fz->errno. ':' .$fz->error); } $fz->close();*/ $sql1 = "INSERT IGNORE `staff`SET `name`= ?,`salary`= ? ;";//新增语句 $stmt = $mysqli -> prepare($sql1);//创建预处理对象 $name = 'Su61'; $salary = '1999'; $stmt -> bind_param('si',$name,$salary);//绑定参数 if ($stmt->execute()) {//execute()执行$stmt if ($stmt->affected_rows > 0) {//如果受影响数据行>0,affected_rows echo '<br>成功的插入'.$stmt->affected_rows.' 条记录,新增记录的主键id是: ' . $stmt->insert_id; } else { echo '<br>没有新增记录'; } } else { exit($stmt->errno. ':' .$stmt->error); } $stmt -> close();//注销预处理对象 $mysqli -> close();//关闭连接
运行实例 »
点击 "运行实例" 按钮查看在线实例
<?php /** 插入多条数据 */ require '082902.php';//连接数据库 $sql = "INSERT IGNORE `staff` SET `name`= ?,`salary`= ?;";//准备插入数据的语句 $stmt = $mysqli -> prepare($sql);//创建预处理对象 //用数组准备好要添加的数据 $data[] = ['name'=> 'Sul7','salary'=> 6666]; $data[] = ['name'=> 'Sul8','salary'=> 6567]; $data[] = ['name'=> 'Sul9','salary'=> 4544]; $data[] = ['name'=> 'Sul10','salary'=> 6526]; $stmt -> bind_param('si',$name,$salary);//绑定参数 foreach ($data as $staff)//遍历数组获取数据 { $name = $staff['name']; $salary = $staff['salary']; if ($stmt->execute()) {//execute()执行$stmt if ($stmt->affected_rows > 0) {//如果受影响数据行>0,affected_rows echo '<br>成功的插入'.$stmt->affected_rows.' 条记录,新增记录的主键id是: ' . $stmt->insert_id; } else { echo '<br>没有新增记录'; } } else { exit($stmt->errno. ':' .$stmt->error); } } $stmt -> close();//注销预处理对象 $mysqli -> close();//关闭连接 /*INSERT IGNORE `staff`SET `name`= ?,`salary`= ?;//插入数据 INSERT IGNORE `表` SET `字段` = ?; INSERT IGNORE `表` SET `字段` = ?; $stmt = $mysqli -> prepare("INSERT IGNORE `表` SET `字段` = ?;")//创建预处理对象,预处理对象为数据库对象mysqli的预执行操作 $stmt -> bind_param();//绑定参数将对应参数数据绑定到预处理对象stmt的占位符中 $stmt -> execute();//开始执行sql语句的操作 */
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例Mysql更新数据
<?php //更新数据库数据 require '082902.php'; $sql = "UPDATE `staff` SET `salary`=? WHERE `id`=?; ";//准备更新语句 $stmt = $mysqli -> prepare($sql);//创建预处理对象 $salary = 1000; $id = 8; $stmt -> bind_param('ii',$salary,$id);//绑定参数 if ($stmt->execute()) {//execute()执行预处理 if ($stmt->affected_rows > 0) {//如果受影响数据行>0,affected_rows echo '成功的更新'.$stmt->affected_rows.'条记录'; } else { echo '没有更新记录'; } } else { exit($stmt->errno. ':' .$stmt->error); } $stmt -> close();//注销预处理对象 $mysqli -> close();//关闭连接 /*$stmt = $mysqli -> prepare("UPDATE `staff` SET `salary`=? WHERE `id`=?; ");//创建预处理对象*/
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例Mysql删除数据
<?php require '082902.php'; $sql = "DELETE FROM `staff` WHERE `id`=?;";//准备删除语句 $stmt = $mysqli -> prepare($sql);//创建预处理对象 $id = 42; $stmt -> bind_param('i',$id); if ($stmt->execute()) {//执行预处理 if ($stmt->affected_rows > 0) { echo '成功的删除'.$stmt->affected_rows.' 条记录'; } else { echo '没有删除记录'; } } else { exit($stmt->errno. ':' .$stmt->error); } $stmt->close();//注销预处理对象 $mysqli->close();//关闭连接 //$stmt = $mysqli -> prepare("DELETE FROM `表` WHERE `id`=?");//创建预处理对象
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例Mysql查询数据
<?php require '082902.php'; $sql = "SELECT `id`,`name`,`salary` FROM `staff` WHERE `salary`>?;";//创建条件查询语句 $stmt = $mysqli -> stmt_init();//初始化预处理对象 if ($stmt -> prepare($sql)) { $salary = 4000; $stmt ->bind_param('i',$salary); if($stmt -> execute()){//执行预处理查询 $stmt ->store_result();//获取结果置于缓存区 $stmt ->bind_result($id,$name,$salary);//将获取结果中的列绑定到变量上 if ($stmt->num_rows > 0) {//结果是为空,只有不为空的时候才遍历 while ($stmt->fetch()) { // 遍历结果,fetch()每次获取一条记录,并将指针自动下移 echo 'id:'.$id.'---姓名:' .$name.'---工资:'.$salary.'<br>';//输出遍历结果 } } else { exit('当前表中没有数据'); } } }else{ exit($stmt->errno. ': ' . $stmt->error);//返回sql语句检测阶段的出错信息 }
运行实例 »
点击 "运行实例" 按钮查看在线实例
手抄:
总结:
1理解类与对象的区别,类是抽象的是对象的一个模板,对象是类的实例
2创建私有类属性(关键字private)并通过__get()方法实现实例化后的公共访问,__set()方法来实现属性值的设置
3连接数据库方法:
a配置连接参数(可以单独写入一个文件,可以是单个变量或数组)
b创建数据库连接,并返回mysqli对象$mysqli = new mysqli($db['host'],$db['user'],$db['pass'],$db['name']);(此处参数用的数组导入)
c检查连接$mysqli->connect_errno(连接错误数字编号)$mysqli->connect_error(连接错误文本信息)
4新增数据的SQL语句:INSERT IGNORE `表` SET `字段` = ?;更新数据语句:UPDATE `表` SET `需更新的字段`=? WHERE `id`=?;删除语句:DELETE FROM `表` WHERE `id`=?;查询语句:SELECT `字段` FROM `表` WHERE `字段(条件一般为整型字段)>?;
5在MySQL执行增删改查的操作流程中常用函数方法:创建预处理对象$stmt = $mysqli -> prepare($sql);绑定参数bind_param('类型如i表示整型',参数);执行预处理$stmt->execute();注销预处理对象:$stmt->close();关闭连接:$mysqli->close();还有检查操作的返回查询如:affected_rows(受影响的行数);store_result()(获取结果置于缓存区);$mysqli -> stmt_init()(初始化预处理对象);bind_result(参数)(将获取结果中的列绑定到变量上);$stmt->errno(返回错误编号);$stmt->error(返回错误文本信息)等
6本次作业耗时较长,知识点较多,类与对象,MySQL数据库的连接与增删查改涉及知识点范围宽泛,由于缺乏基础很多地方理解起来比较慢,还好本周的课程类与对象的知识点还在讲,之前花很多时间预习这块知识,还不至于落后很多,还有后面的PDO的作业以及cookie与session会话机制,登录验证综合案例的作业还没完成,在理解清楚每节课的内容的基础上连同本周作业会尽快补上