在本系列中,我將介紹 PHP 物件導向程式設計 (OOP) 的基礎知識。內容將被組織成連續的部分,每個部分都專注於一個特定的主題。如果您是初學者或不熟悉 OOP 概念,本系列旨在逐步指導您。 在這一部分中,我將討論 PHP 中的建構子和析構函式。讓我們一起開始學習PHP OOP的旅程吧!
我們首先嘗試了解什麼是建構子?簡單來說,建構函式是創建類別的物件時自動呼叫的特殊方法。構造函數用於初始化物件的屬性。這是PHP中的一個神奇方法。但現在我們需要詳細了解建構函式。我們先來看一個程式碼範例。
class Car { public $name; public $color; public function setValue(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $toyota = new Car; $toyota->setValue('Toyota', 'Red'); $toyota->getValue();
在上面的範例中,或是在上一節中,我們使用方法設定物件的值。這稱為Setter方法,意味著在創建類別的物件後,如果我們使用該物件的方法來設定值,則稱為Setter方法。然而,我們可以使用 PHP 內建的魔術方法來簡化這個過程。這個方法稱為建構函數,在 PHP 中,它是使用 __construct() 定義的。讓我們看下面的例子。
class Car { public $name; public $color; function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $toyota = new Car('Toyota', 'Red'); $toyota->getValue();
在此範例中,我們沒有使用 setValue 方法,而是使用 __construct() 方法。那麼,使用 __construct() 有什麼好處呢?在前面的範例中,在建立 Car 類別的物件後,我們必須使用 setValue 方法傳遞每輛車的值。但現在,透過使用 __construct(),我們可以在物件建立時傳遞值,而不必呼叫額外的方法。
但是現在,問題出現了:我們沒有呼叫 __construct(),那麼它是如何接收到值並將其設定給變數的呢?
new Car('Toyota', 'Red');
當我們在類別內部使用 __construct() 時,並且該建構子從外部接收值,我們可以在建立類別物件時傳遞第一個括號中的值。一旦我們以這種方式建立了對象,就會自動呼叫 __construct() 方法。換句話說,每當我們建立類別的實例時,它都會立即呼叫 __construct() 方法。這就是我們如何使用建構函式初始化物件的屬性。由於 __construct() 是魔術方法,因此我們不需要明確地呼叫它。它會在特定場景下自動執行,執行特定任務。
析構函數也是 PHP 中的一個神奇方法。當我們使用類別建立物件時,我們會使用該物件執行各種任務。但是當任務完成時,就意味著銷毀物件時會觸發析構函數。析構函數在 PHP 中使用 __destruct() 定義。
這裡要注意的是,如果我們使用一個類別來建立多個對象,那麼當所有物件都被銷毀時,每個物件都會呼叫 __destruct() 方法。換句話說,__destruct() 方法將被呼叫與使用該類別建立的物件數量一樣多的次數。讓我們看下面的例子。
class Car { public $name; public $color; public function setValue(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $toyota = new Car; $toyota->setValue('Toyota', 'Red'); $toyota->getValue();
如果我們運行此程式碼,我們將看到以下輸出。
class Car { public $name; public $color; function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function getValue() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } $toyota = new Car('Toyota', 'Red'); $toyota->getValue();
現在,您可能想知道在哪些情況下我們應該使用 __destruct() 方法。當我們使用文件或資料庫時,我們需要打開它們,但是一旦我們的任務完成,我們就需要關閉文件或資料庫。在這種情況下,我們可以使用 __destruct() 方法。此外,__destruct() 方法還有許多現實生活中的用例。
我希望現在我們對 __construct() 和 __destruct() 有一些了解。除了這些方法之外,PHP 還有其他重要的魔術方法,例如 __call()、__callStatic() 等。我們也可以使用這些方法,因為它們在類別中的各種場景中執行某些任務。
所以,這就是今天的全部內容。我們將在下一課中詳細討論另一個主題。敬請關注!快樂編碼!
您可以在 Linkedin 和 GitHub 上與我聯絡。
以上是PHP OOP 部分建構函數與析構函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!