iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
Software Development

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

Day 12 淺談物件導向(二):修飾子、建構子

  • 分享至 

  • xImage
  •  

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

static、private、public、protected間的差別

class裡的成員前面幾乎都會有所謂的修飾子(modifier),若沒有加上修飾子,則預設為public。
static:靜態變數,不須先建立物件就能直接使用
public:公有變數,建立物件後才可使用,內部(own class)、實例(instance)可用
protected:建立物件後才可使用,內部和繼承類別可用
private:私有變數,建立物件後才可使用,且只能在內部中使用
使用範圍由大至小:static > public > protected > private

建構子/解構

constructor是class中的一種特殊的method,只有在實體化一個class後(new完後)能被執行,是用來初始化一些class特性的。

ClassName objectName = new ClassName(要帶的參數);

有兩種寫法:
function __construct()function ClassName
比較建議第一個寫法,因為有時候改了class名稱會忘記連constructor的名稱一起改。
解構子則是將已經用完不需要的物件release掉,會在unset($objectName)後被執行。

範例:

<?php
class Student
{
    static $school = "NCKU";
    public $name;
    public $score;
    private $id;

    public function __construct($name, $score, $ID) //建構子
    { 
        $this->name = $name;
        $this->score = $score;
        $this->id = $ID;
    }

    public function showScore()
    {
        echo $this->name . " got " . $this->score . "\n";
    }

    private function showID()
    {
        echo $this->name . "'s studentID is ' " . $this->id. "\n";
    }
}

    echo Student::$school."\n"; // static變數不需要先建立物件就能直接使用

    $name = 'Lisa';
    $score = 80;
    $ID = 123456;
    $studentA = new Student($name, $score, $ID);
    //實體化一個Student物件,帶的參數會先到constructor做初始化
    
    $studentA->showScore();
    
    $studentA->showID(); 
    //Fatal error:因為showID這個method是private的,無法在class Student範圍以外的地方使用

    unset($studentA);//使用完畢,解構$studentA,釋放該物件的記憶體空間


上一篇
Day 11 淺談物件導向 (一):class與method
下一篇
Day 13 淺談物件導向(三):來聊聊封裝與繼承
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言