在本系列中,我將介紹 PHP 物件導向程式設計 (OOP) 的基礎知識。內容將被組織成連續的部分,每個部分都專注於一個特定的主題。如果您是初學者或不熟悉 OOP 概念,本系列旨在逐步指導您。在這一部分中,我將討論 PHP 中的存取修飾符、封裝和繼承。讓我們一起開始學習PHP OOP的旅程吧!
存取修飾符用於控制類別屬性和方法的存取等級。也就是說,它控制你擁有多少存取權限等。 PHP 提供了三種類型的存取修飾符:
要使用這些存取修飾符,您需要在定義屬性或方法之前使用關鍵字 public、protected 或 private 來聲明它們。需要注意的是,如果您沒有為屬性或方法指定任何存取修飾符,則預設情況下它將被視為公用。
class MyClass { public $publicVar; // Accessible from anywhere protected $protectedVar; // Accessible from this class and subclass private $privateVar; // Accessible from only this class public function publicMethod() { // Accessible from anywhere } protected function protectedMethod() { // Accessible from this class and subclass } private function privateMethod() { // Accessible from only this class } }
使用這些存取修飾符,我們可以控制對類別的資料和功能的訪問,這與類別內的封裝和安全性密切相關。
封裝是建立新實體以確保隱私或資訊安全的過程。一個類別可以有各種屬性和方法,我們可以使用存取修飾符來定義如何在類別外部存取這些屬性和方法。簡而言之,封裝就是控制對類別資料和功能的存取。
封裝可以發生在不同的等級:
屬性是與類別的物件關聯的類別的資料成員。預設情況下,屬性是公共的,但我們可以使用私有或受保護的存取修飾符來保護它們。這可以防止從外部程式碼直接存取資料。這個概念稱為屬性級封裝。
方法是類別的對其實例起作用的函數或操作。一個方法可能包含許多可以對外部類別隱藏的實作。透過這樣做,我們允許外部程式碼使用該方法,但不能存取其內部實作。這稱為方法級封裝。
在這個級別,類別的屬性和方法被安全地儲存在類別中,並且從類別外部對它們的直接存取受到限制。但是,可以透過繼承來存取它們。這稱為類別級封裝。
除此之外,還可以根據需要在其他層面實現封裝。
繼承是一種程式設計概念,其中一個類別(稱為子類別或子類別)從另一個類別(稱為超類別或父類別)繼承屬性和方法。
為了簡化,考慮一個具有某些屬性和方法的類別。如果另一個類別需要這些相同的屬性和方法,那麼我們可以將它們從原始類別繼承到新類別中,而不是重寫它們。這個概念稱為繼承,其主要目的是重複使用程式碼並避免程式碼重複。當一個類別繼承另一個類別時:
讓我們來看一個程式碼範例
class MyClass { public $publicVar; // Accessible from anywhere protected $protectedVar; // Accessible from this class and subclass private $privateVar; // Accessible from only this class public function publicMethod() { // Accessible from anywhere } protected function protectedMethod() { // Accessible from this class and subclass } private function privateMethod() { // Accessible from only this class } }
在上面的例子中,我們可以看到Vehicle類別被Car和Bus類別繼承。因此,Vehicle 類別中標記為 public 或 protected 的屬性和方法可以在這些子類別中存取。
多層繼承是指一個類別繼承另一個類,然後該類別本身又被第三個類別繼承的情況。這允許第三個類別存取基底類別和中間類別的屬性和方法(標記為公共或受保護)。
class Vehicle { public $name; public $color; public function start() { // start login } public function stop() { // stop login } } class Car extends Vehicle { function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function carInfo() { echo "Car name: $this->name\n"; echo "Car color: $this->color\n"; } } class Bus extends Vehicle { function __construct(string $name, string $color) { $this->name = $name; $this->color = $color; } public function busInfo() { echo "Bus name: $this->name\n"; echo "Bus color: $this->color\n"; } } $toyota = new Car('Toyota', 'Red'); $toyota->start(); $toyota->carInfo(); $toyota->stop(); $tesla = new Bus('Zip', 'Blue'); $tesla->start(); $tesla->busInfo(); $tesla->stop();
在這個例子中,Vehicle類別被Car類別繼承,最後Car類別被ElectricCar類別繼承。因此,這展示了多層繼承的實際作用。
我希望本課能讓您對所討論的主題有基本的了解。這就是今天的全部內容——下一課見! ?
以上是PHP OOP 部分存取修飾符、封裝和繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!