PHP重写父类的属性和方法(附带实例)
PHP 中,重写是指在子类中重写父类的同名成员。
重写父类的属性时,子类的属性会直接覆盖父类的属性,父类的属性将不存在;重写父类的方法时,子类的方法和父类的方法同时存在,重写的方法必须和父类的方法访问权限一致或更加开放。通过重写父类的方法可以实现扩展或修改业务逻辑的目的。
下面演示重写的使用方法,具体步骤如下:
1) 定义 People 类,具体代码如下:
2) 定义 Man 类继承 People 类,具体代码如下:
3) 实例化 Man 类,调用 show() 方法和 say() 方法,具体代码如下:
将 Man 类中 say() 方法的访问控制修饰符修改为 protected,再次运行程序时会报错,具体错误信息如下:
子类重写父类后,既继承了父类的功能,又根据需求重新实现了父类的某个方法,通过重写实现了父类的扩展和创新。在日常生活中,如果现有的经验或方法存在弊端,我们也需要打破陈规,勇于创新。
重写父类的属性时,子类的属性会直接覆盖父类的属性,父类的属性将不存在;重写父类的方法时,子类的方法和父类的方法同时存在,重写的方法必须和父类的方法访问权限一致或更加开放。通过重写父类的方法可以实现扩展或修改业务逻辑的目的。
下面演示重写的使用方法,具体步骤如下:
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() 方法时,实际上调用的是父类方法。