PHP OOP-继承
时间:2020-02-23 14:42:02 来源:igfitidea点击:
在本教程中,我们将学习有关PHP中的继承的知识。
什么是继承?
在面向对象编程中,当一个类从另一个类派生其属性和方法时,则称为继承。
派生属性和方法的类称为子类或者子类。
发生继承的类称为超类或者父类。
我们使用extends
关键字从父类继承。
在下面的示例中,我们有父类Vehicle。
我们正在创建从父类继承的子类Car。
//parent class class Vehicle { private $color; public function setColor($color) { $this->color = $color; } public function getColor() { return $this->color; } } //child class class Car extends Vehicle { private $steeringWheel; public function setSteeringWheel($steeringWheel) { $this->steeringWheel = $steeringWheel; } public function getSteeringWheel() { return $this->steeringWheel; } } //object of the child class $obj = new Car(); //set property $obj->setColor("Black"); $obj->setSteeringWheel("Leather"); //get property $color = $obj->getColor(); $steeringWheel = $obj->getSteeringWheel(); //this will output "Color = Black and SteeringWheel = Leather" printf("Color = %s and SteeringWheel = %s", $color, $steeringWheel);
可以继承的属性和方法
公共和受保护的属性和方法可以从父类继承到子类。
私有属性和方法不能被继承。
方法重写
在OOP中,当子类具有与父类同名的方法时,这称为父类方法的重写。
当子类的对象调用该方法时,将执行子类方法而不是父类方法。
在下面的示例中,我们有一个父类" Foo",它被子类" Po"继承。
父类具有方法" hello()",该方法在子类Po中被覆盖。
//parent class class Foo { //method public function display() { printf("class Foo method display..."); } public function hello() { printf("class Foo method hello..."); } } //child class class Po extends Foo { //override hello - parent method public function hello() { printf("class Po method hello... method hello() overridden..."); } } //object of parent class Foo $foo_obj = new Foo(); $foo_obj->display(); //this will print "class Foo method display..." $foo_obj->hello(); //this will print "class Foo method hello..." //object of child class Po $po_obj = new Po(); $po_obj->hello(); //this will print "class Po method hello... method hello() overridden..."
调用重写的父方法
要从子类调用父类的重写方法,我们使用parent
关键字,后跟::
运算符,然后使用方法名称。
//parent class class Foo { public function hello() { printf("class Foo method hello..."); } } //child class class Po extends Foo{ //overriding parent method public function hello() { printf("class Po method hello..."); //calling parent method parent::hello(); } } //creating child class object $po_obj = new Po(); /** * this will print * "class Po method hello..." * "class Foo method hello..." */ $po_obj->hello();
防止类被继承
为了防止类被继承,我们使用final
关键字。
final class Sample { } //this will cause error - can't inherit final class class Foo extends Sample { }
防止方法被重写
为了防止类方法被覆盖,我们在函数之前使用final
关键字。
//parent class class Sample { //final method public final function hello() { } } //child class class Po extends Sample { //this will given error - can't override final method public function hello() { } }