PHP是一種廣泛使用的開源服務器端腳本語言,擁有眾多優雅的編程習慣,其中extends就是其中之一。extends可以使用在類的定義中,它指定了某個類從另一個類中繼承它的屬性和方法,從而讓代碼更簡潔、易于維護。
下面是一個簡單的例子:
class Animal { public function greeting() { echo "Hi, I'm an animal."; } } class Dog extends Animal { public function barking() { echo "Woof! Woof!"; } } $dog = new Dog(); $dog->greeting(); //輸出 "Hi, I'm an animal." $dog->barking(); //輸出 "Woof! Woof!"
在這個例子中,類Dog繼承了類Animal的greeting方法,此時在類Dog中調用$dog->greeting()時,就會執行從類Animal繼承的代碼塊,最終輸出"Hi, I'm an animal.",相當于全部重寫一遍代碼,強行裝備普通的方法。
在繼承機制中,子類可以利用extends關鍵字繼承父類的所有public和protected的方法和屬性,并且子類還可以添加自己的方法和屬性,從而實現更具體的功能。注意:如果父類中有private的成員變量或者方法,那么子類將無法直接繼承這些成員。
下面是一個稍微復雜一些的例子:
class Vehicle { public $brand; public $model; public function setBrand($brand) { $this->brand = $brand; } public function setModel($model) { $this->model = $model; } public function getModel() { echo $this->model; } } class Car extends Vehicle { private $engineType; public function setEngineType($type) { $this->engineType = $type; } public function showInfo() { echo "Brand: " . $this->brand . "<br>"; echo "Model: " . $this->model . "<br>"; echo "Engine type: " . $this->engineType; } } $car = new Car(); $car->setBrand("BMW"); $car->setModel("X1"); $car->setEngineType("Gasoline"); $car->showInfo(); //輸出 "Brand: BMW Model: X1 Engine type: Gasoline"
在這個例子中,定義了父類Vehicle和子類Car。在父類Vehicle中有$brand、$model和一系列的setter和getter方法。在子類Car中,新增了私有成員變量$engineType和相關的setter方法和showInfo方法。在showInfo方法中調用了brands、models和engineType的變量。經過這些繼承的實現過程,我們再次提高了代碼的復用率。
最后需要注意的是,當子類繼承父類時,如果兩個類中都定義了同名的方法,子類中定義的方法會覆蓋父類中定義的方法。這里所說的覆蓋并不是把父類的方法完全刪除掉,而是子類的方法會把父類方法覆蓋掉。
在學習了extends的使用方法后,我們可以在開發過程中更得心應手,提高代碼的復用率和可維護性,從而更好地完成項目任務。