继承使一个类能够从另一个类继承所有公共和受保护的属性和方法。被继承的类称为基类或父类。从另一个类继承的类称为派生类或子类。继承提供了代码的可重用性,并在不修改类的情况下为类添加更多功能。
创建派生类
要创建派生类,必须指定 PHP extends 关键字。请参阅下面的语法。派生类继承基类的所有公共和受保护成员。
语法
//定义一个类
class base_class {
class members;
};
//定义派生类
class derived_class extends base_class {
code statements;
};
示例:
在下面的示例中,基类创建名为 Person 的对象,它具有两个名为 name 和 age 的属性。 Student 是 Person 的派生类。派生类 Student 继承基类 Person 的所有公共和受保护的属性和方法。
<?php
class Person {
public $name = "John";
public $age = 15;
};
//Student是Person的派生类
class Student extends Person {
public $grade = "ninth grade";
};
$s1 = new Student();
echo $s1->name." studies in ".$s1->grade.".\n";
echo $s1->name." is ".$s1->age." years old.";
?>
上述代码的输出将是:
John studies in ninth grade.
John is 15 years old.
继承成员的访问说明符
- public可以被继承,可以外部访问(也就是实例化对象可以直接访问)
- protected受保护的,可以被子类继承,无法外部访问
- private继承,外部无法访问。
看下面的例子:
<?php
class Person
{
public $name = "yxjc";
protected $nickname = "易学教程";
private $username = "yxjc123";
public function say()
{
echo "hello,My name is yxjc"."\n";
}
}
class Student extends Person
{
public function __construct()
{
#说明public protected属性都可以由父类继承过来
echo "父类名字是".$this->name."__昵称".$this->nickname."__用户名"."\n";
# private 属性不可继承访问
echo "用户名".$this->username."\n";
}
public function sayHello($name,$age)
{
echo "hello, My name is ".$name."age is ".$age."\n";
}
}
$stu = new Student();
$stu->say();
$stu->sayHello('李四',32);
echo $stu->name;#说明public属性可以由外部访问(也就是实例化对象可以直接访问)
echo $stu->nickname;//protected不可外部访问
?>
输出结果:
父类名字是yxjc__昵称易学教程__用户名
用户名
hello,My name is yxjc
hello, My name is 李四age is 32
yxjc
Fatal error: Uncaught Error: Cannot access protected property Student::$nickname in