2021年11月17日

寫給 PHP 新手的物件導向教學(一):建立類別與物件

前言

PHP 過去在物件導向的實現上有許多的缺陷以及令人詬病的地方,

然而自從 2015 年推出了 PHP 7 、以及 2020 年推出 PHP 8 以後,

PHP 已經擺脫了過去的陰霾,不但效能提升許多,也成為了一個相當完整可靠的物件導向程式語言。

 

經過多年的發展,目前許多流行的 PHP 框架遵循著物件導向的概念,

這些框架充分地利用 PHP 在 OOP 上的特性,設計出許多優良的機制,

讓工程師們可以更快速地開發出符合市場需求的系統。

 

本系列希望能夠一步一步講解物件導向的概念,

希望讀者最後能夠理解複雜的物件導向程式碼,

並可以自行設計出良好的程式。

 

定義類別

類別是物件導向的出發點,甚至可以說沒有類別就不會有物件導向。

 

那什麼是類別呢?類別的定義是一群資料與行為的結合,

聽起來好像有點抽象,但別擔心,先別深究,稍微放在心上就好,我們不會一開始就講得太複雜。


總之,我們先來創造一個簡單的類別,

在 PHP 中定義類別相當的簡單,像下面這樣短短幾行,就完成了一個最基本的類別的定義:

class Student { 
}

沒錯,上面這段程式代表我們已經成功定義了一個叫做 Student 的類別了,很輕鬆吧。

 

我們先來解讀一下這段程式,class 是 PHP 中保留的關鍵字(Reserved Words),用來定義類別的,

class 後面會緊接著類別名稱,也就是範例中所看到的 Student

整句話合在一起看就是:定義一個叫做 Student 的類別。

 

Class 的中文我使用「類別」 ,在本系列文章會交替使用類別及 Class 。

 

建立物件

有了類別後,下一步就是建立物件。這個物件就是物件導向中的物件。

建立物件我們會使用 new 這個關鍵字,我們來試著用 newStudent 建立物件:

$student = new Student();

透過 new 這個關鍵字,我們建立了一個 Student 物件,

並且把這個物件存放到變數 $student 中,

因此現在變數 $student 就是一個 Student 的物件。

 

我們每次執行 new後,PHP 都會建立一個全新的物件,

所以我們可以一直建立新物件,每個物件都是獨立的個體:

$student1 = new Student();
$student2 = new Student();

這樣我們就建立了兩個 Student 物件,在物件導向中,我們經常會使用同個類別建立出許多物件。

 

Object 的中文我使用「物件」 ,在本系列文章會交替使用物件及 Object 。

 

屬性

還記得前面提到的類別定義嗎?類別是一群資料行為的結合,

而那些在類別中的資料,我們會給一個特別的名字:屬性。

 

每個物件都可以儲存自己所需的資料,

而這些被儲存起來的資料稱為屬性 (property),它們其實就是一般的變數,只是藏在每個物件中。

 

我們可以簡單地透過箭頭 -> 把資料放到物件的屬性中,像是這樣:

$student1 = new Student();
$student1->name = 'Jack';

$student2 = new Student();
$student2->name = 'Annie';

也可以透過箭頭 -> 把指定的屬性取出,並印出值:

echo $student1->name;  // output: Jack
echo $student2->name;  // output: Annie

 

這邊有一個重要的觀念要提醒一下,

前面有提到, new 每次都會產生一個新物件,

所以 $student1$student2name 是獨立的,

在之後的文章會提到例外狀況,所以請特別留意這個現象哦。

 

-> 又稱為 object operator,可以用來取得物件的變數,在之後的文章中,也會被用來呼叫物件的函式。

 

類別跟物件的差別

類別跟物件是很多人都容易搞混的點,要解釋起來好像也不是那麼容易。

在剛開始學習 PHP 物件導向的時候,可以先把類別想像成工廠裡的模具,我們將原料灌入模具後,就可以製成一個一個的成品,每個成品雖然都長得一模一樣,但是其實都是各自獨立的個體。

然後我們可以針對每個成品進行不一樣的加工,讓它們變的有點不一樣。它們雖然長得有點不一樣,但其實本質上都還是一樣的東西。

至於我們要怎麼加工物件,就讓我們繼續看一下去吧。

 

補充

另外我們習慣將類別名稱使用大寫駝峰式的方式命名,所以 S 會大寫,

其他如:HighSchoolStudent、FemaleStudent 這樣的命名方式,也都是大寫駝峰式。

 

目錄:寫給 PHP 新手的物件導向教學

下一回:寫給 PHP 新手的物件導向教學(二):建構子、方法及屬性