iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
Software Development

後端基礎PHP+Mysql & Laravel 30日養成計畫系列 第 11

Day 11 淺談物件導向 (一):class與method

物件導向對於初學者來說可能是個較容易混淆的概念。
要搞懂物件導向,首先要釐清類別(class)、屬性(property)、方法(method)、實體(instance)之間的差別及用法。
class是一個藍圖,裡面定義了屬於這個class的物件該有什麼特性和功能。

class ClassName{
    
    public $property1;
    private $property2;
    private $property3;
    
    function __construct() { //建構子
            
    }
    private function methodName1(){
        //方法內容
    }
    public function methodName2(){
        //方法內容
    }

    function __destruct() { //解構子
            
    }
    
}

property是這個物件應該有的一些變數,property前面的public、private是『 修飾子 』,表示該property的使用權限,這個之後會再詳細介紹。

而method則是一些function,是該物件擁有的功能或動作,建構子和解構子的部份之後會再跟大家細談。

註:有學過其他語言的,可能看過他們在定義funcion前都會加上回傳值的型態,但因為php的變數及函式回傳值都是「泛型」,所以不需要定義回傳值的型態。

在class中定義好了這個物件該有的property、method之後,我們還要將這個class實體化,生成實體(instance)(new一個物件)。

而為了方便初學者理解,我們可以用日常生活中所見到的物件來比喻程式語言中的物件:例如一輛汽車,是一個物件(object)。而這個物件中又包含了它的屬性(property)和功能(method)。
屬性可能包含了車的顏色、大小、可乘載人數等,而功能則是指它能夠前進、煞車等等。
那麼要造出這台車前,我們要先有一個藍圖,這個藍圖就是class。

    
class Car{

    public $color;
    public $size;
    public $speed = 150;
    //上面這三個變數是Car這個類別的'屬性'
    //而以下這兩個function是Car這個類別的'方法'

    function outLook($color, $size){
        echo "Your car is $color and is $size meters long.\n";
    }
    
    function run(){
        echo "You can drive the car at most $this->speed km.\n";
    }
    //若我們要使用定義在class中的屬性,前面要加上$this
}

然而,畫出藍圖後,這台車並未真的被造出來。
我們要將這個class『 實體化 』(instantiate),實體化後我們才能開始使用這台車的屬性以及其功能。

$myCar = new Car(); //實體化Car這個class
$myCar->run();
//output:You can drive the car at most 150 km.
$myCar->color = 'red';
$myCar->size = 3;
$myCar->outLook($myCar->color, $myCar->size);
//output:Your car is red and is 3 meters long.

在命名類別時,我們習慣用'大駝峰'式命名,也就是第一個字的字首大寫,而後面每個單字字首也大寫,例如:DriveCar
而命名物件時,我們習慣用'小駝峰'式命名,第一個字的字首小寫,而後面每個單字字首都要大寫,例如:myCar

調用物件方法的符號: ->和::

->用來調用一個實體中的method或property
:: 用來調用『未實體化』的物件的內部靜態成員(static function)
動態和靜態的意義為,我們可以說前者是具有狀態的;而後者則無。
為何說是有狀態與無狀態呢?由於new完一個物件後,記憶體會分配給這個實體一個空間,裡面能夠儲存關於這個實體的property或method的資訊;靜態的function則可視為是『一次性』的,例如將某兩個傳進來的參數做單純的加減乘除,計算完畢、回傳結果後,這些儲存這些計算過程中的記憶體就會被釋放。諸如此類不需要記錄變數狀態的,就可以用靜態的static function來達成需要的功能。


上一篇
Day 10 編輯神器vim
下一篇
Day 12 淺談物件導向(二):修飾子、建構子及解構子?
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言