PHP OOP編程的觀念心得筆記

前言

最近幾年程式語言的 framework 進步真的是飛快,像是最近很火紅的 Vue.js、ReactJS、或是老牌的 Laravel等,而在 PHP 的 framework 當中又以 Laravel 最受開發者青睞,在開始學習 Laravel 之前必須先學習什麼是 OOP (物件導向程式設計 Object-oriented programming) 物件導向並非是有特定的程式規格,就以我個人的觀感理解比較可以說是他是一種

設計模式比較恰當,在學習的過程中只要一直圍繞著他的中心思想,想必在學習上會較為輕鬆。 說這麼多不如直接殺 code 會比較有感覺,在拜讀過 O’reilly現代PHP 之後其中一句話讓人印象深刻意思大概是這樣:

你不需要現在就立馬實踐物件導向設計風格,你只需要將他記在你的腦袋中,直到有一天你豁然開朗的將他應用在你的程式代碼上。 對於像我這樣的新手來說要立馬用上可能有點困難,所以才寫下此篇筆記以供未來參考。

物件導向

命名

通常我們的檔名會與class同名

類別

在英文中又稱 class 在 OOP 當中 class 可以算是一個很基礎的…

物件

class Human{
    public $eyes=2;
}

$human=new human();
var_dump($human);
 我們命名了一個 class 叫 human 並且 new 了一個 $human,所以我可以說 $human 是 Human 這個 class 的一個實例英文為 instance 

Getter 和 Setter

為何我們需要 Getter 和 Setter 呢? 我們用程式碼來展現應該會清楚一點

class Person{
    public $name;
    public $age;

    public function __construct($name) {
        $this->name = $name;
    }

    public function setAge($age){
        if($age < 18){
            throw new Exception("too yong");

        }
        $this->age=$age;
    }
}

$aj=new Person('AJ');
$aj->setAge(17);
var_dump($aj);

//結果為

Fatal error: Uncaught Exception: too yong

這樣我們就可以利用 getter 和 setter 來進行邏輯判斷,可是這樣子會有一個問題,直接給予變數 value 這是一件很不安全的事情 code 如下

$aj=new Person('AJ');
$aj->setAge(23);
$aj->age=15;
var_dump($aj);

//結果為

object(Person)#1 (2) { ["name"]=> string(2) "AJ" ["age"]=> int(15) }

我們可以看到我們直接將 $age 設為15了這樣代表我們的程式邏輯判斷是沒有用的。

參考資料 以上很多的筆記心得都來自

Laravist