继承 inherit [ɪnˈherɪt]: 在定义某个类的时候,可以指定这个类,根据程序中已经存在的某个类派生而来
比如新创建的Student类就继承了Humanity这个类
Student 称作是Humanity的子类, Humanity是 Student的父类
子类继承了父类的属性和方法, 就相当于子类中有和父类一样的属性和方法
子类可以再定义属于自己的属性和方法、类常量
class Humanity{
public $name;
public $sex;
public $iq=10;
const BIRTHPLACE='地球';
}
class Student extends Humanity{
public $studentId;
public function test($subject){
echo "{$this->name}正在考{$subject}!";
}
}
$hanMM=new Student('韩梅梅','女');
$hanMM->eat('苹果');
$hanMM->test('数学');
Annotation:
Times of inherit is not restrictive, also they can have the same father class.
想改父类的方法不能在父类的代码里改,而是用方法重写
方法重写:在子类里面包含和父类同名的方法
重写的方法的参数必须和父类中对应方法的参数一致,构造方法出外部
如果不希望父类中的某些方法被子类重写,在父类定义前加上final表示该类不能被继承,
属性不能定义为final,只有类和方法才能定义为final (不建议在类前面加final,因为继承是面向对象常用的手段)
<?php
/* Created by PhpStorm
* @author: ROBIN.FANG
* @Date: 2020/6/23 Time: 12:40
*/
header('Content-Type:text/html;charset=utf-8');
class Humanity{
public $name;
public $sex;
public $iq=10;
const BIRTHPLACE='地球';
//Constructor Function
public function __construct($name,$sex){
$this->name=$name;
$this->sex=$sex;
}
//方法前面加上final,这个方法就不能被子类重写
public function eat($food){
echo "<p>{$this->name}正在吃{$food}</p>";
}
}
class Student extends Humanity{
public $studentId;
public function test($subject){
echo "<p>{$this->name}正在考{$subject}</p>";
}
//方法重写,相当于在当前这个子类里面覆盖了父类的某个方法!
//参数的个数要和父类一致,构造函数的参数个数无需和父类里面的构造函数的参数个数一致
public function eat($food){
echo "<p>{$this->name}正在快速地吃{$food}!</p>";
}
}
class Worker extends Humanity{
}
class ClassLeader extends Student{
public function manage($arg){
echo "{$this->name}:{$arg}";
}
}
$hanMM=new Student('韩梅梅','女');
$hanMM->eat('苹果');
$hanMM->test('数学');
$xiaoXin=new Worker('蜡笔小新','男');
$xiaoXin->eat('青椒');
$liLei=new ClassLeader('李雷','男');
$liLei->eat('香蕉');
$liLei->manage('你们上课不要乱说话,不要影响其他同学!');
//韩梅梅正在快速地吃苹果!
//
//韩梅梅正在考数学
//
//蜡笔小新正在吃青椒
//
//李雷正在快速地吃香蕉!
//
//李雷:你们上课不要乱说话,不要影响其他同学!
string get_parent_class ([mixed $obj])
返回对象或类的父类名,如果在对象的方法内调用,则 obj为可选项