跟PHP一起玩轉物件導向:從玩具箱到工具箱-基礎介紹

更新於 2024/08/10閱讀時間約 7 分鐘

這一階段將對物件導向程式設計(OOP)的核心概念進行初步介紹,為後續更進階的學習奠定基礎。


第一節:物件導向程式設計介紹

  • 物件導向程式設計的概念:介紹 OOP 是一種程式設計範式,它使用「物件」來設計應用程式和電腦程式。物件導向程式設計的目的是提高軟體的重用性、可擴展性和可維護性...。介紹的部分就不贅述囉

第二節:OOP 的基本概念

類別(Class)和物件(Object)

類別是設計圖,描述了一組有相同屬性(Attribute)和方法(Method)的物件應有的結構。想像類別就像是製造汽車的設計藍圖,而物件則是根據這個藍圖生產出來的實際汽車。每一輛汽車(物件)都可以有不同的顏色或馬力(屬性值),但它們都是根據同一個設計藍圖(類別)製造的。

屬性(Attributes)

屬性是類別中用來存放資料的變數,你可以想像它們是物件的特徵,比如一個人類別(Person Class)的物件可能會有名字(Name)、年齡(Age)等屬性。

方法(Methods)

方法定義了物件能夠執行的操作,比如一個汽車物件可能有啟動(Start)和停止(Stop)的方法。方法在類別中定義,並且由物件來調用。

第三節:PHP 中的類別和物件

定義類別

使用 class 關鍵字在 PHP 中定義一個類別,並說明如何為類別添加屬性和方法。

<?php

namespace Rewrite\\ExerciseObjectOriented;

/**
*
* Class Person
* @package Rewrite\\ExerciseObjectOriented
*/
class Person
{
/** @var string 屬性-姓名 */
public string $name;

/** @var int 屬性-年齡 */
private int $age;

/**
* Person constructor.
*
* @param string $name
* @param int $age
*/
public function __construct(string $name, int $age)
{
$this->name = $name;
$this->age = $age;
}

/**
* 方法-取得年齡
*
* @return int
*/
public function getAge(): int
{
return $this->age;
}

/**
* 方法-設定年齡
*
* @param int $age
*/
public function setAge(int $age): void
{
$this->age = $age;
}
}

  • 創建物件:介紹如何使用 new 關鍵字從類別創建物件的實例。
    // 創建一個 Person 類別的實例
    $person = new Person();

    $person->name = "張三"; // 因為「name」是公開的,所以可以直接『存取』設定屬性值

    $person->setAge(20); // 調用方法
    echo $person->getAge(); // 輸出年齡



第四節:為何使用物件導向程式設計

封裝(Encapsulation)

封裝是 OOP 的一大特點,它讓物件的詳細實現隱藏起來,只露出有限的介面供外部使用。這樣不僅保證了數據的安全性,也提高了代碼的可維護性。在上述的 Person 類別中,age 屬性就是被封裝起來的,外部只能透過 setAgegetAge 方法來訪問。

封裝不僅是隱藏數據,更重要的是抽象化的過程,提供清晰的界面,讓使用者不需要關心物件內部的實現細節,只需要通過這些界面來與物件互動。這樣,即使內部實現變化,只要介面保持不變,使用該物件的程式碼就不需要做任何改動。

繼承(Inheritance)

繼承讓子類別可以繼承父類別的屬性和方法,而無需從零開始重寫。例如,如果有一個基礎類別叫做 Vehicle,我們可以創建一個 Car 類別來繼承它:

<?php

namespace Rewrite\\ExerciseObjectOriented;

/**
* 交通工具
*
* Class Vehicle
* @package Rewrite\\ExerciseObjectOriented
*/
class Vehicle
{
/** @var string 廠牌 */
public string $brand;

/**
* @return void
*/
public function start(): void
{
echo "發動引擎";
}
}
<?php

namespace Rewrite\\ExerciseObjectOriented;

/**
* 汽車
* Car 繼承 Vehicle
*
* Class Car
* @package Rewrite\\ExerciseObjectOriented
*/
class Car extends Vehicle
{
/**
* @return void
*/
public function openTrunk()
{
echo "打開後車廂";
}
}
$car = new Car();
$car->brand = "Toyota";
$car->start(); // 繼承自 Vehicle 類別
$car->openTrunk(); // Car 類別自己的方法

多型(Polymorphism)

多型指的是不同類別的物件可以透過相同的介面進行操作。在 PHP 中,我們通常透過介面(Interface)或抽象類別(Abstract Class)來實現多型,這部分我們後續在延伸說明。


第五節:動手試試看

  • 練習1:定義一個 Person 類別,包含 nameage 屬性,以及一個顯示個人資訊的方法。
    class Person {
    /**
    * 自行定義內容
    */
    }

    // 執行端結果
    $person1 = new Person("王小明", 25);
    $person1->introduce(); // 輸出: 我的名字是 王小明,今年 25 歲。

  • 練習2:創建一個 Student 類別,繼承自 Person 類別,新增學號(studentID)屬性和學習(study)方法。
    class Student extends Person {
    /**
    * 自行定義內容
    */
    }

    $student = new Student("林小花", 20);
    $student->studentID = "B123456789";
    $student->introduce(); // 繼承自 Person 類別
    $student->study(); // Student 類別自己的方法


透過這些內容,我們可以獲得物件導向程式設計的初步理解,為進一步探索 PHP 中的 OOP 概念打下基礎。

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在上一篇,我們寫好了低強度階段,這也代表音樂本身的架構已經完成一大半了,畢竟要用的和聲、音色的堆疊、曲子的氛圍,都是以低強度的曲子為基礎,再發展出其他部分。 不過,在開始之前,我們先來聊聊電玩音樂要怎麼在不同的情緒之間轉換,你就會更了解中強度和高強度音樂該怎麼寫囉。
Thumbnail
在電玩中,每個玩家的行為都不同,有人可能會在探索整個地圖時探索到迷路、有人可能打怪打特別久、有人可能玩到一半跑去上廁所。 所以在每個不同的電玩情境下,就變成你的音樂都不知道該播放多久才會切換到下一個情境中,甚至可能戰鬥完了,又要回到原本的氛圍音樂,這整個音樂播放的過程不是線性的從頭到尾,而是隨著情
Thumbnail
可能包含敏感內容
那天閨蜜來家裡一起練舞 跳舞跳完 進到房間裡一起玩了起來 跟閨蜜玩一玩 被老公發現了 而他也忍不住的加入了我們
Thumbnail
這是8月3日傍晚日本每日新聞的報導。 當時日本氣象預報表示6號卡努颱風將會來個回馬槍U型迴轉,其主要原因在於太平洋高氣壓與偏西風。
Thumbnail
先簡單說結論: 一個等號是賦值;二個等號是等於;三個等號是相同。
Thumbnail
「謝謝大家的歡迎,很高興有機會加入大家行列,希望藉由這個聚會讓我更認識神」MJ開始學習用基督徒的話說話,雖然覺得很怪,但他認為這麼做才能幫助自己快速融入大家。方才加入信仰小組的MJ,在不知情的狀況下跟著師母讀起「決志禱告文」,讀完後他的大腦思緒混亂到近乎空白了。
Thumbnail
當推特開始推展認證系統後,其他沒有認證的平台是不是就好像沒有那麼潮了? 要知道幣圈已經今非昔比在消費群眾裡面已經不容忽視,科技公司巨頭當然也知道加密領域是門好生意,跟風不是會不會發生,而是多快發生而已。
Thumbnail
「每一個人都應該要學習被領導與領導別人。」每一個人,都可能在生命的某個時刻,學習著要領導其他人,儘管我現在只是一個普通媽媽,卻也是個領導人,母親這個天職,讓我必須承擔起帶領兩個孩子的責任。 所以當我在看到雅典娜在面對走或不走的決定時,我不禁設想,如果我是她,該怎麼決定?
Thumbnail
20初頭就在海外流浪, 朋友以為我賺很多才可以老是換地方, 但他們不知道的是 - 小資族的玩法也可以很繽紛多漾. 今天跟大家分享除了代購, 廉價機票, 以及青年旅社外, 妳還有什麼方式可以花小錢「趴趴走」...
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在上一篇,我們寫好了低強度階段,這也代表音樂本身的架構已經完成一大半了,畢竟要用的和聲、音色的堆疊、曲子的氛圍,都是以低強度的曲子為基礎,再發展出其他部分。 不過,在開始之前,我們先來聊聊電玩音樂要怎麼在不同的情緒之間轉換,你就會更了解中強度和高強度音樂該怎麼寫囉。
Thumbnail
在電玩中,每個玩家的行為都不同,有人可能會在探索整個地圖時探索到迷路、有人可能打怪打特別久、有人可能玩到一半跑去上廁所。 所以在每個不同的電玩情境下,就變成你的音樂都不知道該播放多久才會切換到下一個情境中,甚至可能戰鬥完了,又要回到原本的氛圍音樂,這整個音樂播放的過程不是線性的從頭到尾,而是隨著情
Thumbnail
可能包含敏感內容
那天閨蜜來家裡一起練舞 跳舞跳完 進到房間裡一起玩了起來 跟閨蜜玩一玩 被老公發現了 而他也忍不住的加入了我們
Thumbnail
這是8月3日傍晚日本每日新聞的報導。 當時日本氣象預報表示6號卡努颱風將會來個回馬槍U型迴轉,其主要原因在於太平洋高氣壓與偏西風。
Thumbnail
先簡單說結論: 一個等號是賦值;二個等號是等於;三個等號是相同。
Thumbnail
「謝謝大家的歡迎,很高興有機會加入大家行列,希望藉由這個聚會讓我更認識神」MJ開始學習用基督徒的話說話,雖然覺得很怪,但他認為這麼做才能幫助自己快速融入大家。方才加入信仰小組的MJ,在不知情的狀況下跟著師母讀起「決志禱告文」,讀完後他的大腦思緒混亂到近乎空白了。
Thumbnail
當推特開始推展認證系統後,其他沒有認證的平台是不是就好像沒有那麼潮了? 要知道幣圈已經今非昔比在消費群眾裡面已經不容忽視,科技公司巨頭當然也知道加密領域是門好生意,跟風不是會不會發生,而是多快發生而已。
Thumbnail
「每一個人都應該要學習被領導與領導別人。」每一個人,都可能在生命的某個時刻,學習著要領導其他人,儘管我現在只是一個普通媽媽,卻也是個領導人,母親這個天職,讓我必須承擔起帶領兩個孩子的責任。 所以當我在看到雅典娜在面對走或不走的決定時,我不禁設想,如果我是她,該怎麼決定?
Thumbnail
20初頭就在海外流浪, 朋友以為我賺很多才可以老是換地方, 但他們不知道的是 - 小資族的玩法也可以很繽紛多漾. 今天跟大家分享除了代購, 廉價機票, 以及青年旅社外, 妳還有什麼方式可以花小錢「趴趴走」...