以下是原文翻译成繁體中文的Markdown格式:

PHP - Classes and Objects

# PHP - 類別與物件

歡迎,有志者程式設計師!今天,我們將深入PHP類別與物件的精彩世界。別擔心這些術語聽起來有點令人生畏 - 在這堂課結束之前,你將能像專業人士一樣創建自己的類別和物件!

## 什麼是類別和物件?

在我們進行代碼之前,讓我們先了解類別和物件是什麼。想像你正在建造一個房子。類別就像是房子的設計圖,而物件則是根據這個設計圖建造的實際房子。你可以從一個設計圖(類別)創造出許多房子(物件)。

## 在PHP中定義一個類別

讓我們從創建我們的第一個PHP類別開始。我們將創建一個簡單的`Car`類別。

```php
<?php
class Car {
    // 類別屬性
    public $brand;
    public $color;

    // 類別方法
    public function startEngine() {
        return "隆隆!這輛$this->color $this->brand正在啟動。";
    }
}
?>

讓我們分解這段代碼:

  1. 我們從class關鍵字開始,然後是我們類別的名稱(在這個例子中是Car)。
  2. 在類別內部,我們定義屬性(變量)如$brand$color
  3. 我們還定義了一個名為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 正在啟動。

這裡發生了什麼:

  1. 我們使用new關鍵字從我們的Car類別創建物件。
  2. 我們使用箭頭(->)運算符設定每個物件的屬性。
  3. 我們在每個物件上調用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();
?>

建構子讓我們在創建物件時設定brandcolor,使我們的代碼更乾淨、更高效。

繼承

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