下面是针对“PHP面向对象程序设计(OOP)之方法重写(override)操作示例”的完整攻略,包括以下几个方面:
- 介绍方法重写的概念和作用
- 方法重写的基本使用方法和要点
- 两条示例说明
什么是方法重写?
在面向对象编程中,继承是一种常见的编程方式。当一个类继承另一个类时,就会自动继承被继承类中的所有属性和方法。但是有时候,我们继承过来的方法可能并不完全符合我们的需求,这时候就可以对这些方法进行重写(override)。方法重写指的是在子类中重新定义从父类中继承而来的方法,以实现更加符合子类需要的功能。
方法重写的基本使用方法
方法重写的基本使用方法与继承类似。在子类中,你需要重新定义一个与父类中已有的方法同名的方法。下面是方法重写的基本语法:
class A {
public function foo() { echo "A::foo()\n"; }
}
class B extends A {
public function foo() { echo "B::foo()\n"; }
}
$a = new A();
$b = new B();
$a->foo(); // 输出 "A::foo()"
$b->foo(); // 输出 "B::foo()"
从上面的代码可以看到,当调用一个方法时,PHP 会首先在当前类中查找该方法,如果没有找到就会逐级向上查找父类。因此,当调用 B
类的 foo()
方法时,程序会优先使用子类中的方法,而不是父类中的。
同时,在子类中如果想要使用父类的方法,你也可以使用 parent::
关键字。例如,你可以使用 parent::foo()
来调用父类中的 foo()
方法。
两条示例说明
以下是两条示例说明:
示例一
class Animal {
public function makeSound() {
echo "Animal::makeSound()\n";
}
}
class Dog extends Animal {
public function makeSound() {
echo "Dog::makeSound()\n";
}
}
class Cat extends Animal {
public function makeSound() {
echo "Cat::makeSound()\n";
}
}
$animals = array(new Animal(), new Dog(), new Cat());
foreach($animals as $animal) {
$animal->makeSound(); // 输出不同的声音
}
在上面的代码中,我们定义了三个类:Animal
、Dog
和 Cat
。其中 Dog
和 Cat
类都继承自 Animal
类,并分别重写了 makeSound()
方法,以实现狗的叫声和猫的叫声。
当我们将这三个类实例化后,可以发现在调用他们的 makeSound()
方法时,会输出不同的声音。这就是方法重写的作用。
示例二
class Shape {
protected $color;
public function __construct($color) {
$this->color = $color;
}
public function getArea() {
// 该函数需要在子类中重写以实现具体的图形面积计算
}
}
class Rectangle extends Shape {
protected $width;
protected $height;
public function __construct($color, $width, $height) {
parent::__construct($color);
$this->width = $width;
$this->height = $height;
}
public function getArea() {
return $this->width * $this->height;
}
}
class Circle extends Shape {
protected $radius;
public function __construct($color, $radius) {
parent::__construct($color);
$this->radius = $radius;
}
public function getArea() {
return pi() * $this->radius ** 2;
}
}
$shapes = array(new Rectangle("red", 5, 3), new Circle("green", 2));
foreach($shapes as $shape) {
echo "Area of " . get_class($shape) . " is " . $shape->getArea() . "\n";
}
在上面的代码中,我们定义了两个类:Shape
和 Rectangle
。Shape
类是一个抽象类,用于定义形状的基本属性和方法,其中自带一个 getArea()
方法需要在子类中实现。
我们使用 Rectangle
类继承自 Shape
类,并重写了 getArea()
方法,实现了矩形的面积计算。同时,我们还定义了 Circle
类,同样继承自 Shape
类,并重写了 getArea()
方法以实现圆形的面积计算。
当我们将这两个类实例化后,可以发现在调用它们的 getArea()
方法时,会输出不同的面积。这就是方法重写的作用。
以上就是针对“PHP面向对象程序设计(OOP)之方法重写(override)操作示例”的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP面向对象程序设计(OOP)之方法重写(override)操作示例 - Python技术站