繼承是面向對象編程的重要機制,它允許一個類基於另一個類創建新類,子類可以繼承父類的屬性和方法,從而實現代碼復用和擴展。在PHP中,關鍵字extends用於創建子類,而parent::則用於調用父類的成員方法或屬性。
class Animal {
protected $name;
protected $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function getInfo() {
return "Name: " . $this->name . ", Age: " . $this->age;
}
}
class Dog extends Animal {
public function bark() {
return "Woof!";
}
}
$dog = new Dog("Rex", 3);
echo $dog->getInfo(); // 輸出 "Name: Rex, Age: 3"
echo $dog->bark(); // 輸出 "Woof!"
以上代碼展示了一個動物基類Animal ,它擁有name和age屬性及獲取信息的方法。子類Dog繼承了這些屬性和方法,並新增了bark()方法,體現了繼承的基本用法。
多態指的是同一接口或方法在不同類的對像中展現出不同的行為。在PHP中,多態主要通過接口( interface )和抽像類( abstract class )實現。接口定義了方法規範,而抽像類則提供部分實現,子類必須具體實現抽象方法。這樣可以使代碼更加靈活和可擴展。
interface Shape {
public function area();
public function perimeter();
}
class Rectangle implements Shape {
private $length;
private $width;
public function __construct($length, $width) {
$this->length = $length;
$this->width = $width;
}
public function area() {
return $this->length * $this->width;
}
public function perimeter() {
return 2 * ($this->length + $this->width);
}
}
class Circle implements Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function area() {
return pi() * pow($this->radius, 2);
}
public function perimeter() {
return 2 * pi() * $this->radius;
}
}
$rectangle = new Rectangle(5, 3);
$circle = new Circle(2);
echo $rectangle->area(); // 輸出 15
echo $rectangle->perimeter(); // 輸出 16
echo $circle->area(); // 輸出 12.566370614359
echo $circle->perimeter(); // 輸出 12.566370614359
在示例中, Rectangle和Circle都實現了Shape接口,必須定義area()和perimeter()方法。不同的實現使同一方法具有不同的行為,這正是多態的體現。
繼承和多態是PHP面向對象編程的基礎,掌握這兩者可以大大提升代碼的組織性和復用性。繼承允許子類獲得父類的屬性和方法,避免重複代碼;多態通過接口或抽像類讓同一方法在不同對像中表現出多樣行為,從而增強代碼的靈活性。本文提供的示例代碼適合初學者理解這些概念,助力開發更高質量的PHP程序。