博客列表 >PHP学习总结(9)类、接口与抽象——2019年09月30号20:00分

PHP学习总结(9)类、接口与抽象——2019年09月30号20:00分

虎子爸爸
虎子爸爸原创
2019年10月06日 15:36:43639浏览

class-a.png

实例

<?php
namespace Animal;
class Animal{
    public $animal_name;
    public $animal_age;
    public $animal_address;
    public $animal_num;
    public $animal_total = "2类";
    const ANIMAL_TYPE = "哺乳动物";//这是常量

    public function __construct(){
        $this->animal_num=100;
        $this->animal_address = "这是父类的初始化方法结果:河南省郑州市黄河路<br>";
    }
    public function info($name,$age,$address){
        echo "小动物的地址---".$address;
        echo "<br>";
        echo "小动物的年龄---".$age;
        echo "<br>";
        echo "小动物的名字---".$name;  
    }
}
// static 静态属性或方法,可以直接调用
class Dog extends Animal{
    public static $dog_father = "MAOSTYLE";
    public static function Father(){
        echo "self调用静态属性---".self::$dog_father."---这是静态方法";
    }

}
// final 把一个类变为不能被继承的类,把一个类的方法变为不能被覆盖的方法
final class Mao extends Animal{   
    public function __construct(){
        parent::__construct();
        //$this->animal_address = "<br>这是子类的初始化--河南郑州深圳路<br>";
    }
    final public function info($name,$age,$address){
        echo "这是方法传递的参数值---".$address."<br>";
        echo "这是继承父类的属性值---".$this->animal_address."<br>";

    }

}
abstract class Yinshi{
    abstract protected function Wuji($type);
}
class MyYinshi extends Yinshi{
    public function Wuji($type,$time="2020-10-20"){
        echo "隐私级别为---".$type."级";
        echo "<br>";
        echo "查询时间为---".$time;
    }
}

$yinshi = new MyYinshi();
$yinshi->Wuji(20,"2020年10月10日");
echo "<br>";

$dog = new Dog();
echo $dog->info('王晓光','20','河南');
$mao = new Mao();
echo "<br>";
echo $mao->info('王晓明',20,'河南郑州');
echo "<br>";
echo "继承父类的属性值---".$mao->animal_num;
echo "<br>";
echo "继承父类的属性值---".$mao->animal_total;
echo "<br>输出const定义的常量值------";
echo "<br>";
echo "输出类常量".Mao::ANIMAL_TYPE;
echo "<br>";
echo "输出类静态属性".Dog::$dog_father;
echo "<br>";
echo Dog::Father();

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>对“面向对象”编程思路的理解</title>
</head>
<body>
    <h3>面向对象——是一种编程思路</h3>
    <dd>以PHP语言为例:</dd>
    <pre>
    正常编程就是定义一些变量,函数,然后利用运算符对变量进行操作,像下面这样,
    先定义小动物---小狗--a的一系列特点
    $animal_dog_a_name = "wangxiaogou" ;
    $animal_dog_a_age = 12 ;
    $animal_dog_a_address = "郑州" ;

    先定义小动物---小狗--b的一系列特点
    $animal_dog_b_name = "wangxiaogou" ;
    $animal_dog_b_age = 12 ;
    $animal_dog_b_address = "郑州" ;

    继续定义小动物---小猫--c的一系列特点
    $animal_mao_c_name = "wangxiaogou" ;
    $animal_mao_c_age = 12 ;
    $animal_mao_c_address = "郑州" ;

    继续定义小动物---小猫--d的一系列特点
    $animal_mao_d_name = "wangxiaogou" ;
    $animal_mao_d_age = 12 ;
    $animal_mao_d_address = "郑州" ;

    最后输出它们——
    echo $animal_dog_a_address;
    echo $animal_dog_a_age;
    echo $animal_dog_a_name;
    ------
    感觉很麻烦!

    那就发挥程序员的特点,怎么懒怎么来,就弄个集合——称作“函数”输出他们——
    function dog($name,$age,$address){
        echo "小狗的地址".$address;
        echo "小狗的年龄".$age;
        echo "小狗的名字".$name;
    }
    function mao($name,$age,$address){
        echo "小猫的地址".$address;
        echo "小猫的年龄".$age;
        echo "小猫的名字".$name; 
    }

    这样写了一段时间,感觉还是麻烦,继续发挥程序员的特点,继续弄个集合——称作"类"
    class Dog{
        public $animal_dog_name;
        public $animal_dog_age;
        public $animal_dog_address;
        function info($name,$age,$address){
            echo "小狗的地址".$address;
            echo "小狗的年龄".$age;
            echo "小狗的名字".$name;
        }
    }
    class Mao{
        public $animal_mao_name;
        public $animal_mao_age;
        public $animal_mao_address;
        public function info($name,$age,$address){
            echo "小猫的地址".$address;
            echo "小猫的年龄".$age;
            echo "小猫的名字".$name;
        }
    }
    这时出现了一个麻烦事情——两个集合"类"中的函数名称一致,然后这程序员就想了一个更鬼的事情——不同名字的文件可以有相同的称呼——这个称呼就被称作"命名空间"
    假如这几个文件都没有称呼,就会被默认为存在于一个鬼空间——虚无空间——虚拟空间
    通过这个方法就解决了上面Dog集合和Mao集合有相同函数名称的问题!
    这时候感觉还是有点不美,那继续发挥程序员的特点,继续集合——这时就想出了"父类"
    class Animal{
        public $animal_name;
        public $animal_age;
        public $animal_address;
        public function info(){
            echo "小动物的地址".$address;
            echo "小动物的年龄".$age;
            echo "小动物的名字".$name;  
        }
    }
    然后上面的Dog类和Mao类就可以简化为
    class Dog extends Animal{
        ***
    }
    class Mao extends Animal{
        ***
    }
    后来程序员神经了,他不希望你直接继承他的隐私类,就给了我们一个中间类,这个中间类就叫他给我们的接口(类),也是公共类。
    比如Qlogin,这个就是他给我们的接口类。
    咱们用他的接口类——最主要的是接收他通过这个方法传递给我们的数据
    interface Qlogin{
        public function logininfo($name,$time){    }
        public function reginfo($name,$time){}
    }
    我们想用这个接口类,就得这样用——
    class Login implements Qlogin{
        private $userinfo = [];        
        public function logininfo($name,$time){
            $this->userinfo['name']=$name;
            $this->userinfo['login_time']=$time;
        }
        public function reginfo($name,$time){
            $this->userinfo['name']= $name;
            $this->userinfo['reg_time'] = $time;
        }
    }
    程序员为了防止咱们直接去看(实例化)他的隐私类,他又想了个方法——把他的隐私类抽象!
    这里的抽象,简单的讲就是咱只能复制(继承)他的隐私类回家去看,不能直接去看!
    abstract class Yinshi{
        abstract protected function Wuji($type);
    }
    假如我们直接想看——
    $yinshi = new Yinshi();这样就会报错

    想看就只能extends!
    class MyYinshi extends Yinshi{
        public function Wuji($type,$time){
            echo "隐私级别为---".$type."级";
            echo "<br>";
            echo "查询时间为---".$time;
        }
    }
    现在来看!
    $yinshi = new MyYinshi();
    $yinshi->Wuji(20,"2020年10月10日");
    程序员的特点继续走起---
    他想直接访问一个类的属性或方法,咋办————static!
    从类、命名空间到接口类、抽象类,再到静态strtic、常量const,final,构造方法,都是程序员的特性!

运行实例 »

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


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