以下是原文翻译成繁體中文的Markdown格式:
# PHP - 類別與物件
歡迎,有志者程式設計師!今天,我們將深入PHP類別與物件的精彩世界。別擔心這些術語聽起來有點令人生畏 - 在這堂課結束之前,你將能像專業人士一樣創建自己的類別和物件!
## 什麼是類別和物件?
在我們進行代碼之前,讓我們先了解類別和物件是什麼。想像你正在建造一個房子。類別就像是房子的設計圖,而物件則是根據這個設計圖建造的實際房子。你可以從一個設計圖(類別)創造出許多房子(物件)。
## 在PHP中定義一個類別
讓我們從創建我們的第一個PHP類別開始。我們將創建一個簡單的`Car`類別。
```php
<?php
class Car {
// 類別屬性
public $brand;
public $color;
// 類別方法
public function startEngine() {
return "隆隆!這輛$this->color $this->brand正在啟動。";
}
}
?>
讓我們分解這段代碼:
- 我們從
class
關鍵字開始,然後是我們類別的名稱(在這個例子中是Car
)。 - 在類別內部,我們定義屬性(變量)如
$brand
和$color
。 - 我們還定義了一個名為
startEngine()
的方法(函數)。
從類別創建物件
現在我們有了Car
類別,讓我們創建一些車輛物件!
<?php
// 創建車輛物件
$myCar = new Car();
$myCar->brand = "Toyota";
$myCar->color = "紅色";
$friendsCar = new Car();
$friendsCar->brand = "Honda";
$friendsCar->color = "藍色";
// 使用物件的方法
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
輸出:
隆隆!這輛紅色 Toyota 正在啟動。
隆隆!這輛藍色 Honda 正在啟動。
這裡發生了什麼:
- 我們使用
new
關鍵字從我們的Car
類別創建物件。 - 我們使用箭頭(
->
)運算符設定每個物件的屬性。 - 我們在每個物件上調用
startEngine()
方法。
建構子方法
現在,讓我們通過添加一個建構子來讓我們的類別更複雜一點。建構子是一個特別的方法,當物件被創建時會被調用。
<?php
class Car {
public $brand;
public $color;
// 建構子
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}
public function startEngine() {
return "隆隆!這輛$this->color $this->brand正在啟動。";
}
}
// 使用建構子創建車輛物件
$myCar = new Car("Toyota", "紅色");
$friendsCar = new Car("Honda", "藍色");
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
建構子讓我們在創建物件時設定brand
和color
,使我們的代碼更乾淨、更高效。
繼承
OOP的一個強大特點是繼承。它讓我們能夠基於一個現有的類別創建一個新的類別。讓我們創建一個從我們的Car
類別繼承而來的ElectricCar
類別。
<?php
class ElectricCar extends Car {
public $batteryLife;
public function __construct($brand, $color, $batteryLife) {
parent::__construct($brand, $color);
$this->batteryLife = $batteryLife;
}
public function chargeBattery() {
return "這輛$this->color $this->brand正在充電。當前電池壽命:$this->batteryLife%。";
}
}
$teslaModel3 = new ElectricCar("Tesla", "白色", 80);
echo $teslaModel3->startEngine();
echo $teslaModel3->chargeBattery();
?>
輸出:
隆隆!這輛白色 Tesla 正在啟動。
這輛白色 Tesla 正在充電。當前電池壽命:80%
在這裡,ElectricCar
繼承了Car
的所有屬性和方法,並添加了自己的屬性($batteryLife
)和方法(chargeBattery()
)。
存取修飾符
在OOP中,我們可以使用存取修飾符來控制屬性和方法的可見性。有三種類型:
修飾符 | 描述 |
---|---|
public | 從任何地方可訪問 |
protected | 在類別內部和派生類中可訪問 |
private | 只在類別內部可訪問 |
讓我們修改我們的Car
類別來使用這些:
<?php
class Car {
protected $brand;
private $engineStarted = false;
public function __construct($brand) {
$this->brand = $brand;
}
public function startEngine() {
$this->engineStarted = true;
return "這輛$this->brand的引擎現在正在運行。";
}
public function isEngineRunning() {
return $this->engineStarted;
}
}
$myCar = new Car("Toyota");
echo $myCar->startEngine();
echo $myCar->isEngineRunning() ? "引擎正在運行" : "引擎已關閉";
// 這會導致錯誤:echo $myCar->engineStarted;
?>
現在,$brand
是受保護的(在子類中可訪問),$engineStarted
是私有的(只在Car
類別內部可訪問),而我們的方法仍然是公共的。
結論
恭喜你!你剛剛踏入了PHP面向對象編程的世界。我們已經介紹了類別、物件、建構子、繼承和存取修飾符。這些概念構成了OOP的基礎,並將在你繼續編程旅程中為你提供良好的服務。
記住,熟練來自練習。嘗試創建自己的類別,嘗試不同的屬性和方法,並不要害怕犯錯誤 - 我們就是這樣學習的!快樂編程!
Credits: Image by storyset