博客列表 >私有化类属性通过创建公共接口在实例化后访问,MySQL数据库连接以及SQL语句的增删查改操作方法应用 20180829课后作业

私有化类属性通过创建公共接口在实例化后访问,MySQL数据库连接以及SQL语句的增删查改操作方法应用 20180829课后作业

一点蓝的博客
一点蓝的博客原创
2018年09月04日 19:24:05706浏览

本次作业主要包含创建私有属性,通过创建对外访问的公共接口进行访问私有属性值(理解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会话机制,登录验证综合案例的作业还没完成,在理解清楚每节课的内容的基础上连同本周作业会尽快补上


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议