Blogger Information
Blog 40
fans 0
comment 0
visits 37584
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP学习总结(9)类、接口与抽象——2019年09月30号20:00分
虎子爸爸
Original
641 people have browsed it

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,构造方法,都是程序员的特性!

运行实例 »

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


Correction status:qualified

Teacher's comments:$animal_mao_d_name, 对于变量, 官方并不推荐这种方式, 这是函数的推荐方式, 以后可以试着用驼峰法:$animalMaoDName
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
Author's latest blog post