Correction status:qualified
Teacher's comments:$animal_mao_d_name, 对于变量, 官方并不推荐这种方式, 这是函数的推荐方式, 以后可以试着用驼峰法:$animalMaoDName
<?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,构造方法,都是程序员的特性!
点击 "运行实例" 按钮查看在线实例