首页 > 编程笔记 > PHP笔记 阅读:14

PHP重写父类的属性和方法(附带实例)

PHP 中,重写是指在子类中重写父类的同名成员。

重写父类的属性时,子类的属性会直接覆盖父类的属性,父类的属性将不存在;重写父类的方法时,子类的方法和父类的方法同时存在,重写的方法必须和父类的方法访问权限一致或更加开放。通过重写父类的方法可以实现扩展或修改业务逻辑的目的。

下面演示重写的使用方法,具体步骤如下:
1) 定义 People 类,具体代码如下:
class People
{
    public $name = 'People';
    public function show()
    {
        echo __CLASS__;
    }
    public function say()
    {
        echo __CLASS__ . ' say';
    }
}
在上述代码中,定义了 People 类。该类中定义了公有属性 $name,公有方法 show() 和 say(),在方法中使用魔术常量 __CLASS__ 返回当前被调用的类名。

2) 定义 Man 类继承 People 类,具体代码如下:
class Man extends People
{
    public $name = 'Man';
    public function show()
    {
        echo __CLASS__;
    }
    public function say()
    {
        echo __CLASS__ . ' say';
    }
}
在上述代码中,Man 类继承了 People 类,Man 类中定义了与父类同名的公有属性 $name,公有方法 show() 和 say()。

3) 实例化 Man 类,调用 show() 方法和 say() 方法,具体代码如下:
$man = new Man();
var_dump($man);   // object(Man)#1(1){["name"]=>string(3)"Man"}
$man->show();     // Man
$man->say();      // Man say
在上述代码中,调用 show() 方法和 say() 方法时,会实现方法的重写。

将 Man 类中 say() 方法的访问控制修饰符修改为 protected,再次运行程序时会报错,具体错误信息如下:
Fatal error: Access level to Man::say() must be public (as in class People) in…
由上述错误信息可知,Man 类 say() 方法的访问级别必须和 People 类中 say() 方法一致。

子类重写父类后,既继承了父类的功能,又根据需求重新实现了父类的某个方法,通过重写实现了父类的扩展和创新。在日常生活中,如果现有的经验或方法存在弊端,我们也需要打破陈规,勇于创新。

PHP parent关键字

子类重写父类的方法后,如果想继续使用父类的方法,可以使用 parent 关键字配合范围解析操作符调用父类方法,具体语法格式如下:
parent::父类方法();
下面演示在子类中调用父类方法,示例代码如下:
class Man extends People
{
    public function show(){
        parent::show();
    }
}
在上述代码中,show() 方法中使用了 parent 关键字调用父类方法,当调用 show() 方法时,实际上调用的是父类方法。

相关文章