继承使一个类能够从另一个类继承所有公共和受保护的属性和方法。被继承的类称为基类父类。从另一个类继承的类称为派生类子类。继承提供了代码的可重用性,并在不修改类的情况下为类添加更多功能。

创建派生类

要创建派生类,必须指定 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. 

继承成员的访问说明符

  1. public可以被继承,可以外部访问(也就是实例化对象可以直接访问)
  2. protected受保护的,可以被子类继承,无法外部访问
  3. 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