批改状态:合格
老师批语:$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,构造方法,都是程序员的特性!点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号