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

更新於 發佈於 閱讀時間約 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 概念打下基礎。

留言
avatar-img
留言分享你的想法!
avatar-img
詹姆士的軟體易開罐
26會員
83內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
2024/09/06
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
2024/09/06
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
2024/08/25
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
2024/08/25
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
2024/08/18
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
Thumbnail
2024/08/18
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
這一節談的是用物件導向程式設計(object-oriented programming, OOP)的方式來實作隨機漫步。
Thumbnail
這一節談的是用物件導向程式設計(object-oriented programming, OOP)的方式來實作隨機漫步。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
Thumbnail
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
Thumbnail
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News