Blogger Information
Blog 15
fans 0
comment 0
visits 12375
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
私有化类属性通过创建公共接口在实例化后访问,MySQL数据库连接以及SQL语句的增删查改操作方法应用 20180829课后作业
一点蓝的博客
Original
705 people have browsed it

本次作业主要包含创建私有属性,通过创建对外访问的公共接口进行访问私有属性值(理解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>';

运行实例 »

点击 "运行实例" 按钮查看在线实例

本地运行效果截图:

082901.jpg

实例二数据库连接

<?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语句检测阶段的出错信息
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

手抄:

082902.jpg

082903.jpg

总结:

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会话机制,登录验证综合案例的作业还没完成,在理解清楚每节课的内容的基础上连同本周作业会尽快补上


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments