跟PHP一起玩轉物件導向:從玩具箱到工具箱-進階概念

閱讀時間約 7 分鐘

第三階段:進階概念

在上個階段,你可能有看到繼承的影子,在這個階段,我們會探討繼承、介面和抽象類別等更深入的概念。這些都是提高程式碼重用性、擴展性和維護性的重要工具。


繼承

繼承是 OOP 中的一個核心概念,它允許一個類別(子類別)繼承另一個類別(父類別)的屬性和方法。這意味著我們可以創建一個通用的父類別,然後通過繼承來擴展這個父類別,創建出專門的子類別。

<?php

namespace Rewrite\\ExerciseObjectOriented;

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

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

namespace Rewrite\\ExerciseObjectOriented;

/**
* 汽車
* Car 繼承 Vehicle
*
* Class Car
* @package Rewrite\\ExerciseObjectOriented
*/
class Car extends Vehicle
{
/**
*
* @return void
*/
public function openDoor(): void
{
echo "車門打開了";
}
}

使用端

$car = new Car();
$car->brand = "Toyota";
$car->startEngine(); // 繼承自 Vehicle 類別
$car->openDoor(); // Car 類別自己的方法

在這個例子中,Car 類別繼承了 Vehicle 類別的 brand 屬性和 startEngine 方法。此外,Car 類別還定義了自己的 openDoor 方法。

子類別可以覆寫(Override)父類別的方法,提供自己的實現:

<?php

namespace Rewrite\\ExerciseObjectOriented;

/**
* 電動車
* ElectricCar 繼承 Vehicle
*
* Class ElectricCar
* @package Rewrite\\ExerciseObjectOriented
*/
class ElectricCar extends Vehicle {

/**
* @return void
*/
public function startEngine(): void
{
echo "啟動電動馬達";
}
}

$electricCar = new ElectricCar();
$electricCar->startEngine(); // 輸出: 啟動電動馬達

介面(Interface)

介面定義了一組方法的協定,但不提供這些方法的具體實現。一個類別可以實現(Implement)一個或多個介面,並提供所有介面方法的實現。

/**
* Drivable 介面
*
* Interface Drivable
* @package Rewrite\\ExerciseObjectOriented
*/
interface Drivable
{
/**
* 啟動引擎
*
* @return void
*/
public function startEngine(): void;

/**
* 停止引擎
*
* @return void
*/
public function stopEngine(): void;
}

class Car implements Drivable {
public function startEngine() {
echo "車子引擎啟動了";
}

public function stopEngine() {
echo "車子引擎關閉了";
}
}

介面是一種強制約定,保證實現介面的類別提供介面中聲明的所有方法。

抽象類別(Abstract Class)

抽象類別是不能被實例化的類別,主要用於定義一個類別的基本結構,讓其他類別去繼承它並提供具體的實現。

<?php

namespace Rewrite\\ExerciseObjectOriented;

/**
* 動物-抽象類別
*
* Class Animal
* @package Rewrite\\ExerciseObjectOriented
*/
abstract class Animal {
/** @var string 名稱 */
public string $name;

/**
* @return void
*/
public function eat() {
echo "{$this->name} 正在吃東西";
}

/**
*
* 使動物發出聲音
* 抽象方法,子類別必須提供實現
*
* @return void
*/
abstract public function makeSound();
}

class Dog extends Animal {
public function makeSound() {
echo "汪汪汪";
}
}

class Cat extends Animal {
public function makeSound() {
echo "喵喵喵";
}
}

$dog = new Dog();
$dog->name = "小黑";
$dog->eat(); // 輸出: 小黑 正在吃東西
$dog->makeSound(); // 輸出: 汪汪汪

$cat = new Cat();
$cat->name = "小花";
$cat->eat(); // 輸出: 小花 正在吃東西
$cat->makeSound(); // 輸出: 喵喵喵

抽象類別可以包含抽象方法和具體方法。抽象方法是沒有實現的方法,它定義了子類別必須實現的方法。

透過學習這些進階概念,將能夠更好地組織和設計相關的程式碼,使其更加靈活和可維護。

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