php面向对象

面向过程 与 面向对象 的区别!

面向过程:分析出解决问题的步骤,然后再用函数把这些步骤逐一实现!
面向对象:把构成问题的事物分解成各个对象,描述事物在解决问题过程中的行为。

两者优缺点

面对过程:性能比面向对象高,适合单片机,嵌入式开发。
面向对象:易维护、易复用,易扩展。

面向对象三大特性

PHP语言面向对象有三大特性,对于其它编程语言(JAVA、PYTHON)同样适用。

封装性

将敏感数据保护起来,不被外界访问;还可以理解为,将一个功能的方方面面,封装成一个整体
通过访问权限修饰符来实现
提示:在项目中,属性基本都是私有的,通过公有的方法,对私有的属性进行赋值和取值

继承性

面向对象的继承性是指子类可以继承父类的属性和方法,并且子类可以自定义属性和方法。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。

多态性

多态性是指同一个对象在不同的情形下(被实例化),表现出不同的形态。

类的封装性

<?php
//创建一个计算机类
class Cal
{
    /*这个计算机的属性*/
    public  $first;
    public  $second;
    //加法方法
   public  function add(){
        printf($this->first+$this->second);
        echo "<hr>";
	}
}

class 是定义类的关键字,Cal是类名,首字母最好大写。

一个类主要包括属性和方法。上面的示例中包括了2个属性和1个方法。

public表示访问修饰符,意思是公开的,没有隐藏。在类的外部是可以访问这些公开的属性的方法

function是定义方法的关键字

<?php
//创建一个计算机类
class Cal
{
    /*这个计算机的属性*/
    public  $first;
    public  $second;
    /*构造方法*/
    function __construct($first,$second)
    {
        $this->first = $first;
        $this->second = $second;
    }
//加法
   public  function add(){
        printf($this->first+$this->second);
        echo "<hr>";
}
//减法
    public  function sub(){
        printf($this->first-$this->second);
        echo "<hr>";
    }
//乘法
    public  function mul(){
        printf($this->first*$this->second);
        echo "<hr>";
    }
//除法
    public  function div(){
        printf($this->first/$this->second);
        echo "<hr>";
    }

}
//实例化
$cal1 = new Cal();
//给属性赋值
$cal1->first=10;
$cal1->second=5;
//执行方法
$cal1->add();
$cal1->sub();
$cal1->mul();
$cal1->div();

new 是实例化对象的关键字,$cal1中保存的就是一个计算机对象,对象是具体的,是看得见摸得着的具体事物。

访问对象中的属性和方法,要使用符号->。访问属性时,属性名称的$不用添加,比如:

$cal1->first

这里的first 其是就是 Cal类的$first

构造方法和析构方法

构造方法

在类中有一个特殊的方法:构造方法

构造方法的作用:初始化成员变量(属性)
当时用new创建对象时第1个自动调用的方法,就是构造方法
可以带参数,也可以不带
一般不需要主动调用,都是自动调用的
名称固定:_construct([mixed $args[,$...]])

$this : 表示当前对象,只有在类的方法中,当访问成员变量(属性)或自己的方法时,才会用到$this

比如:$this->name ,其中的name 实际上就是指属性$name

<?php
 
 
/**
 * 学生类
 */
class Student
{
    //这是学生的4个属性
    private $no;
    private $name;
    private $sex;
    private $age;
 
    //构造方法
    function __construct($no,$name,$sex,$age)
    {
        $this->no = $no;
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }
 
    //自我介绍
    public  function say(){
        printf("自我介绍:我叫%s,年龄:%d",$this->name,$this->age);
    }
 
 
}
 
//实例化对象
$stu1 = new Student(1001,'张三','男',20);
$stu1->say();

析构方法

析构方法的作用就是:处理对象善后的工作。
对象销毁前自动调用的方法
不带任何参数
作用:垃圾回收工作。例:断开到MySQL的连接
名称固定:__destruct()


<?php
 
 
/**
 * 学生类
 */
class Student
{
    //这是学生的4个属性
    private $no;
    private $name;
    private $sex;
    private $age;
 
    //构造方法
    function __construct($no,$name,$sex,$age)
    {
        $this->no = $no;
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }
 
    //自我介绍
    public  function say(){
        printf("自我介绍:我叫%s,年龄:%d",$this->name,$this->age);
    }
 
    //析构方法
    function __destruct()
    {
        echo '正在执行析构方法 ';
    }
 
}
 
//实例化对象
$stu1 = new Student(1001,'张三','男',20);
 
$stu1->say();

对象何时销毁

网页执行完毕时,对象会自动销毁
使用unset()函数手动销毁对象

$stu1=null;

封装DB类

DB类主要实现连接数据库、查询记录、添加记录、修改记录、删除记录等功能。

首先,我们要准备MYSQL数据库,创建一个myschool数据库,创建一个student数据表

创建一个数据表

CREATE DATABASE IF NOT EXISTS `myschool` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `myschool`;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `student`
--
 
DROP TABLE IF EXISTS `student`;
CREATE TABLE IF NOT EXISTS `student` (
  `no` VARCHAR(11) NOT NULL COMMENT '学号',
  `name` VARCHAR(50) NOT NULL COMMENT '姓名',
  `sex` VARCHAR(2) NOT NULL COMMENT '性别',
  `age` INT(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`no`)
) ENGINE=INNODB

数据的增加,更改,查询,删除

<?php
//数据库操作类,文件名db.php
class Db
{
    private  $conn;
    //构造方法
    function __construct($dbname,$usr,$pwd,$host="127.0.0.1",$port=3306,$coding='utf8')
    {
        //连接MySQL数据库
        $conn = mysqli_connect($host,$usr,$pwd,$dbname,$port);
        if(mysqli_connect_errno($conn))
        {
            echo "连接数据库失败:".mysqli_connect_error();
        }
        mysqli_set_charset($conn,$coding);
        $this->conn = $conn;
        echo "连接数据库成功";
    }
    //析构方法
    function __destruct()
    {
        //关闭数据库连接
        mysqli_close($this->conn);
        echo "<br>断开数据库连接";
    }

//添加
    function  add($table,$data){
         if(!is_array($data)){
             die('第二次参数必须是关联数组');
         }
         $fields = $values = '';

         //遍历$data,构建字段列表和值列表
         foreach ($data as $k=>$v){
             $fields .= '`' . $k . '`,';
             $values .= '"' . $v . '",';
         }

         //去除末尾的逗号
         $fields = rtrim($fields,',');
         $values = rtrim($values,',');

         //构建sql指令
         $sql = "insert into {$table} ($fields) values ($values)";
         //输出sql指令,测试是否正确
//         echo $sql;
        $ret = mysqli_query($this->conn,$sql);
        return $ret;
     }


更改
//    function update($table, $data, $where = '1=1')
//    {
//        if (!is_array($data)) {
//            die('第二个参数必须是数组');
//        }
//        $values = '';
//        foreach ($data as $k => $v) {
//            $values .= "{$k}='{$v}',";
//        }
//        $values = rtrim($values, ',');
//        $condition = '';
//        if (is_array($where)) {
//            foreach ($where as $k => $v) {
//                $condition .= " {$k}='{$v}' and";
//            }
//            $condition = substr($condition, 0, -3);
//        } else {
//            $condition = $where;
//        }
//        $sql = "update {$table} set {$values} where {$condition}";
//        $ret = mysqli_query($this->conn,$sql);
//        return $ret;
//    }
查询
//    function getAll($table, $fields = "*", $where = '1=1')
//    {
//        $condition = '';
//        if (is_array($where)) {
//            foreach ($where as $k => $v) {
//                $condition .= " {$k}='{$v}' and";
//            }
//            $condition = substr($condition, 0, -3);
//        } else {
//            $condition = $where;
//        }
//        $sql = "select {$fields} from {$table} where $condition";
//        $ret = mysqli_query($this->conn, $sql);
//        $arr = [];
//        while ($row = mysqli_fetch_assoc($ret)) {
//            $arr[] = $row;
//
//        }
//        return $arr;
//    }
删除
//    function delete($table,$where ='1=1')
//    {
//        $values = '';
//        foreach ($where as $k => $v) {
//            $values .= "{$k}='{$v}',";
//        }
//        $values = rtrim($values, ',');
//        $condition = '';
//        if (is_array($where)) {
//            foreach ($where as $k => $v) {
//                $condition .= " {$k}='{$v}' and";
//            }
//            $condition = substr($condition, 0, -3);
//        } else {
//            $condition = $where;
//        }
//        $sql = "delete from  {$table} where ($condition)";
//        $ret = mysqli_query($this->conn, $sql);
//        return $ret;
//
//    }
}

文件测试`

<?php
require_once "Db.class.php";
$db = new Db("myschool",'root','');
$db->add('Student',['no'=>'1001','name'=>'李四','sex'=>'男','age'=>20]);
//$db->update('Student',['name'=>'王五']);
//$db->getAll('Student',['age'=>'20']);
//$db->delete('Student','sex');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值