php面向对象全攻略 (七) 继承性

下面就是针对“PHP面向对象全攻略(七)继承性”的详细讲解攻略:

下面就是针对“PHP面向对象全攻略(七)继承性”的详细讲解攻略:

继承性

继承是一种能力,它允许新建的类自动继承为其所属的父/基类的所有属性和方法。在面向对象的编程中,我们常常需要定义一个类作为其他类的基础,然后实现一些公共的方法和属性,而其他子类可以通过继承这些公共的方法和属性来避免重复编写代码并扩展新的功能。PHP中继承的使用非常简单,下面我们就一起来看看。

继承的写法

在PHP中使用extends关键字来声明一个子类继承父类,其语法格式如下:

class ChildClass extends ParentClass
{
    // 子类的方法和属性
}

在这里,ChildClass是子类名称,ParentClass是父类名称,因此子类可以使用父类中已有的所有方法和属性。

下面是一个简单的继承示例:

class Person
{
    public $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function sayHello()
    {
        echo "Hello, my name is " . $this->name . ".";
    }
}

class Student extends Person
{
    public function learn()
    {
        echo $this->name . " is learning.";
    }
}

$stu = new Student("Jack");
$stu->sayHello();
$stu->learn();

在这里,我们定义了一个Person类,其中包含了一个属性和一个方法。然后我们又定义了一个Student类,该类继承了Person类,因此Student对象可以使用Person::namePerson::sayHello()方法。在Student中,我们又添加了一个新的方法learn(),这个方法是Person中没有的,可以用来表示学生在学习。

最后我们创建了一个Student对象,将其名称设为Jack,然后分别调用了父类和子类中的方法。可以看到,sayHello()方法成功输出了Jack的名称,learn()方法也成功输出了Jack is learning.

重写父类方法

有时候,在子类中需要改变父类的某些行为或增加一些新的功能,就需要重写父类中的方法。在PHP中,我们可以直接声明和父类方法同名的方法来覆盖父类的方法。

下面我们就修改上面的示例代码,在子类中重写父类的sayHello()方法:

class Person
{
    public $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function sayHello()
    {
        echo "Hello, my name is " . $this->name . ".";
    }
}

class Student extends Person
{
    public function sayHello()
    {
        echo "Hi, my name is " . $this->name . ".";
    }
    public function learn()
    {
        echo $this->name . " is learning.";
    }
}

$stu = new Student("Jack");
$stu->sayHello();

在这里,我们在Student类中增加了一个与父类同名的sayHello()方法,并且在该方法中使用了不同的输出语句。接着我们创建了一个Student对象,并调用了其sayHello()方法。可以看到,输出的结果已经变为了Hi, my name is Jack.

调用父类方法

有时候,在子类中需要调用父类的某些方法,PHP中也提供了非常简单的语法来实现,我们只需要在子类的方法中调用父类的方法即可使用父类的方法。

下面我们来看一个示例:

class Person
{
    public $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function sayHello()
    {
        echo "Hello, my name is " . $this->name . ".";
    }
}

class Student extends Person
{
    public function sayHello()
    {
        parent::sayHello();
        echo " I am a student.";
    }
    public function learn()
    {
        echo $this->name . " is learning.";
    }
}

$stu = new Student("Jack");
$stu->sayHello();

在这里,我们在子类的sayHello()方法中,使用了parent::来调用父类的sayHello()方法,这样就可以继续使用父类的方法。在子类的sayHello()方法中,我们输出了父类方法的返回结果,并增加了一些其他的内容。

最后我们创建了一个Student对象,并调用了其sayHello()方法。可以看到,输出结果为Hello, my name is Jack. I am a student.

本文标题为:php面向对象全攻略 (七) 继承性

基础教程推荐