PHP入門-Day8:物件導向

閱讀時間約 12 分鐘

類別(Class)

類別是定義對象的模板,用來描述對象有哪些屬性和方法。

建構子(Constructor)

建構子是一種特殊的方法,在創建類的新實例(對象)時自動調用,用於初始化對象的屬性。

class Person {
public $name;

public function __construct($name) {
$this->name = $name;
}
}

$person = new Person("Alice");
echo $person->name; // 輸出:Alice

公開(Public)

公開訪問修飾符表示類的成員可以在類的內部和外部被訪問。

class Car {
public $brand; // 公開屬性

public function __construct($brand) {
$this->brand = $brand;
}

public function drive() {
echo "Driving the $this->brand car.";
}
}

$car = new Car("Toyota");
echo $car->brand; // 可以訪問公開屬性
$car->drive(); // 可以調用公開方法

私有(Private)

私有訪問修飾符表示類的成員只能在該類的內部訪問,無法在外部直接訪問。

class BankAccount {
private $balance; // 私有屬性

public function __construct($initialBalance) {
$this->balance = $initialBalance;
}

public function deposit($amount) {
$this->balance += $amount;
}

public function withdraw($amount) {
if ($amount <= $this->balance) {
$this->balance -= $amount;
} else {
echo "Insufficient funds.";
}
}

public function getBalance() {
return $this->balance; // 可以在內部訪問私有屬性
}
}

$account = new BankAccount(1000);
// $account->balance; // 無法直接訪問私有屬性
echo $account->getBalance(); // 可以間接訪問私有屬性的值
$account->deposit(500);
echo $account->getBalance(); // 輸出:1500
// $account->balance = 5000; // 無法直接設置私有屬性

受保護(Protected)

受保護訪問修飾符表示類的成員可以在該類的內部和其子類中訪問,但無法在外部直接訪問。

class Vehicle {
protected $type; // 受保護屬性

protected function setType($type) {
$this->type = $type;
}

protected function getType() {
return $this->type;
}
}

class Car extends Vehicle {
public function __construct($type) {
$this->setType($type); // 可以在子類中訪問受保護方法
}

public function displayType() {
echo "Vehicle type: " . $this->getType(); // 可以在子類中訪問受保護方法
}
}

$car = new Car("SUV");
$car->displayType(); // 輸出:Vehicle type: SUV
// $car->setType("SUV"); // 無法在外部訪問受保護方法或屬性
// echo $car->getType(); // 無法在外部訪問受保護方法或屬性

繼承(Inheritance)

繼承是指一個類(子類)從另一個類(父類)獲得屬性和方法的能力,可以重用和擴展父類的功能。

class Animal {
public function sound() {
echo "Animal makes a sound";
}
}

class Dog extends Animal {
public function sound() {
echo "Dog barks";
}
}

$dog = new Dog();
$dog->sound(); // 輸出:Dog barks

多型(Polymorphism)

多型是指同一個方法在不同的類中可以有不同的實現方式。它提供了靈活性和擴展性。

class Animal {
public function sound() {
echo "Animal makes a sound";
}
}

class Dog extends Animal {
public function sound() {
echo "Dog barks";
}
}

class Cat extends Animal {
public function sound() {
echo "Cat meows";
}
}

function makeSound(Animal $animal) {
$animal->sound();
}

$dog = new Dog();
$cat = new Cat();

makeSound($dog); // 輸出:Dog barks
makeSound($cat); // 輸出:Cat meows

封裝(Encapsulation)

封裝是一種將數據和操作數據的方法結合在一起的概念,通過訪問修飾符(public、private、protected)來控制對類的成員的訪問權限,達到隱藏內部實現的目的。

class Person {
private $name;

public function setName($name) {
$this->name = $name;
}

public function getName() {
return $this->name;
}
}

$person = new Person();
$person->setName("Alice");
echo $person->getName(); // 輸出:Alice

介面(Interface)

介面是一種僅包含方法聲明但不包含實現的抽象類型。類可以實現(implement)介面,並實現介面中定義的方法。

interface Logger {
public function log($message);
}

class FileLogger implements Logger {
public function log($message) {
// 實現記錄日誌到文件的方法
}
}

抽象類別(Abstract Class)

抽象類別是不能被實例化的類,用 abstract 關鍵字聲明,可以包含抽象方法和實現方法。

abstract class Shape {
abstract public function area();
}

class Circle extends Shape {
private $radius;

public function __construct($radius) {
$this->radius = $radius;
}

public function area() {
return pi() * pow($this->radius, 2);
}
}

靜態類別(Static Class)

靜態類別是指包含靜態成員(屬性和方法)的類,靜態成員可以在不創建類的實例的情況下訪問。

class MathUtility {
public static function add($a, $b) {
return $a + $b;
}
}

echo MathUtility::add(5, 3); // 輸出:8

列舉(Enumerations)

列舉是一種特殊的類型,用於定義一組具名的常量值。在 PHP 中,通常使用 enum 擴展來實現列舉。

enum WeekDays {
case Monday;
case Tuesday;
case Wednesday;
// 其他日子...
}

$day = WeekDays::Monday;

委派(Delegates)

在 PHP 中,"委派" 通常指的是事件委派,可以用來實現事件和事件處理器的分離。

Lambda 表達式

Lambda 表達式是一種匿名函數,可以作為參數傳遞給其他函數。

$add = fn($a, $b) => $a + $b;
echo $add(5, 3); // 輸出:8

泛型(Generics)

泛型是一種在類、接口、函數等中使用型別參數(type parameter)的機制,用來實現更靈活的程式碼重用和類型安全。

class Box<T> {
private $value;

public function __construct(T $value) {
$this->value = $value;
}

public function getValue(): T {
return $this->value;
}
}

反射(Reflection)

反射是指在運行時動態地檢查、操作類型(類、屬性、方法等)的能力,使得可以在運行時探索和使用 PHP 代碼的內部結構。

class MyClass {
private $name;
}

$reflectionClass = new ReflectionClass('MyClass');
$properties = $reflectionClass->getProperties(ReflectionProperty::IS_PRIVATE);
foreach ($properties as $property) {
echo $property->getName(); // 輸出:name
}

12會員
109內容數
日後將分享關於我的經驗(日常、工作、技術),並期待未來能創造屬於我的宇宙。
留言0
查看全部
發表第一個留言支持創作者!
Michael楊 的其他內容
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
在這一章中,我們介紹了PHP中的流程控制語句,包括if、else if、else、三元運算子、switch語句、for迴圈、foreach迴圈、while迴圈、do-while迴圈、循環嵌套以及控制迴圈的語句如break、continue、goto和return。
本章節介紹了PHP中的各種運算符,包括算數運算子、比較運算子、賦值運算子和位元運算子。還討論了運算子的優先等級及其在表達式中的應用。了解這些運算符及其優先等級可以幫助編寫更高效和準確的PHP代碼。
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
在這一章中,我們介紹了PHP中的流程控制語句,包括if、else if、else、三元運算子、switch語句、for迴圈、foreach迴圈、while迴圈、do-while迴圈、循環嵌套以及控制迴圈的語句如break、continue、goto和return。
本章節介紹了PHP中的各種運算符,包括算數運算子、比較運算子、賦值運算子和位元運算子。還討論了運算子的優先等級及其在表達式中的應用。了解這些運算符及其優先等級可以幫助編寫更高效和準確的PHP代碼。
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
你可能也想看
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
在PHP中可以用$this、self、與static代表自己這個類別,有些人可能搞不清楚他們的區別,尤其是self、與static,但是他們各別有自己的意義和用法,在實戰中這些些微的差別可能就會造成不可預期的問題,本文仔細說明了他們之間的差別。
Thumbnail
在PHP的團隊開發中,PHP CS Fixer可以確保每個開發人員的Coding Style相同,是相當重要的工具。本篇文章將會詳細說明PHP CS Fixer在Linux環境下的安裝方式。
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
本文將介紹在Windows環境中安裝SQL Server及相關PHP擴展,以進行與SQL Server的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與SQL Server串接設定。
Thumbnail
本文將介紹在Windows環境中安裝Oracle Instant Client及相關PHP擴展,以進行與Oracle Database的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與Oracle Database的串接設定。
Thumbnail
這篇文章將會提供在伺服器上安裝憑證的步驟,包括下載憑證,設定php.ini以及重新啟動Web Server等。
Thumbnail
PHP(全名為「PHP: Hypertext Preprocessor」)是一門開源的伺服器端程式語言,為動態網頁開發設計。閱讀本文將讓您瞭解PHP的特點、廣泛支援、易學性、資源豐富以及跨平臺性。
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
四捨五入到小數點後第二位,並自動補0到小數點後第二位: sprintf("%.2f", round($num,2)) 本筆記參考: 1. https://www.cnblogs.com/ryanzheng/p/12292852.html
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
在PHP中可以用$this、self、與static代表自己這個類別,有些人可能搞不清楚他們的區別,尤其是self、與static,但是他們各別有自己的意義和用法,在實戰中這些些微的差別可能就會造成不可預期的問題,本文仔細說明了他們之間的差別。
Thumbnail
在PHP的團隊開發中,PHP CS Fixer可以確保每個開發人員的Coding Style相同,是相當重要的工具。本篇文章將會詳細說明PHP CS Fixer在Linux環境下的安裝方式。
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
本文將介紹在Windows環境中安裝SQL Server及相關PHP擴展,以進行與SQL Server的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與SQL Server串接設定。
Thumbnail
本文將介紹在Windows環境中安裝Oracle Instant Client及相關PHP擴展,以進行與Oracle Database的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與Oracle Database的串接設定。
Thumbnail
這篇文章將會提供在伺服器上安裝憑證的步驟,包括下載憑證,設定php.ini以及重新啟動Web Server等。
Thumbnail
PHP(全名為「PHP: Hypertext Preprocessor」)是一門開源的伺服器端程式語言,為動態網頁開發設計。閱讀本文將讓您瞭解PHP的特點、廣泛支援、易學性、資源豐富以及跨平臺性。
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
四捨五入到小數點後第二位,並自動補0到小數點後第二位: sprintf("%.2f", round($num,2)) 本筆記參考: 1. https://www.cnblogs.com/ryanzheng/p/12292852.html