php parent在面向对象语法中代表“父类”,本质上就是代表父类这个“类”,而不是父类的“对象”,其使用方式为“parent::属性或方法;”。
关键字 | 含义 | 使用位置 | 使用示例 |
---|---|---|---|
parent: | 代表父类(这个类) | 肯定在一个方法中 | parent::属性或方法; |
self: | 代表当前其所在的类 | 肯定在一个方法中 | self::静态属性或方法 |
$this: | 代表调用当前方法的对象 | 肯定在一个方法中 | $this->实例属性或方法; |
<?php
class Person{
protected $name;
protected $sex;
protected $age;
function __construct($name="", $sex="男", $age=1){
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function say(){
echo "我的名字: ".$this->name.", 性别: ".$this->sex,", 年龄: ".$this->age;
}
}
class Student extends Person{
private $school; //在学生类中添加一个所在学校的school的成员属性。
//覆盖父类中的构造方法,在参数列表内加一个学校属性,用来创建对象并初始化成员属性
function __construct($name="", $sex="男", $age=1, $school=""){
parent::__construct($name, $sex, $age);
$this->school = $school;
}
function stydy(){
echo $this-name."正在".$this->school."学习";
}
function say(){
parent::say(); //调用父类中被本方法覆盖掉的方法
echo "在".$this->school."学校上学";
}
}
$student = new Student("张三", "女", "23", "edu");//创建一个学生对象,并传给一个学校名称参数
$student->say();//调用学生类中覆盖父类的说话方法
/**结果是: 我的名字: 张三, 性别: 女, 年龄: 23在edu学校上学 */
//注意:在子类中重写的方法访问权限一定不能低于父类被覆盖的放的的访问权限。
//例如父类中方法的访问权限是protected,那么子类中重写的方法的访问权限就要是protected或者public
?>