php面向對象之封裝

面向對象三大特徵:
封裝 繼承 多態

屬性的封裝

class Human {
    public $money = 1000;
}

$lisi = new Human();
echo $lisi->money,'<br />'; // 1000

// 變一下money
$lisi->money = 500;
echo $lisi->money,'<br />'; // 500

李四的錢,別人問他有多少錢,他就如實說.
別人把他的錢減少,立即減少了.

如果在現實生活中,這個現象顯然不合理,我們需要把錢保護起來

public 是公共的,即大家都可以來讀取,操作錢顯然不應該是公共的

改進:

class Human {
    private $money = 1000;

    public function showMoney() {
        return $this->money * 0.8;
    }
}
$lisi = new Human();

echo $lisi->money;//調用失敗,因爲money是私有和,這時,我們就把money "封起來"了

//注意:光封起來,是沒有意義的,因爲money這個屬性還得與外界有所交互才行.


// 你不能直接翻別人口袋,看別人有多少錢.
// 但是,可以問別人有多少錢

//把某些重要屬性 封裝起來,然後通過一個開放的接口來操作.這就實現的對屬性的封裝.
echo $lisi->showMoney();

方法的封裝

class Human {
    private $money = 1000;
    private $bank = 2000;

    private function getBank($num) {
        $this->bank -= $num;
        return $num;
    }

    public function send($much) {
        if($much > $this->money + $this->bank) {
            return false; 
        } else if($much > $this->money){
            $num = $much - $this->money; //算算要從銀行取多少錢?
            $this->money += $this->getBank($num); //從銀行取出錢,加到現金裏

            $this->money -= $much; // 再把錢借給朋友.
            return $much;
        } else { // 直接現金借          
            $this->money -= $much;
            return $much;
        }
    }

    public function showMoney() {
        return $this->money;
    }

    public function showBank() {
        return $this->bank;
    }
}
$lisi = new Human();

$m = $lisi->send(300);
if($m) {
    echo '借了',$m,'元<br />';
    echo '還剩下',$lisi->showMoney(),'元<br />';
}
// 再借 2000 元

$m = $lisi->send(2000);
if($m) {
    echo '借了',$m,'元<br />';
    echo '還剩下',$lisi->showMoney(),'元<br />';
    echo '銀行還有',$lisi->showBank(),'元,<br />';
}

在上個例子中,
借錢者,只知道,借成功了,還是借失敗了.

至於,如果借成功了,lisi是怎麼樣把錢湊齊的,借錢者不會知道lisi也許跑了趟銀行,再把錢湊齊.

就像同學們,只需要 每週一到週五,晚8點到10點來聽課.至於後面,老師的備課,拉網線,等等,你們不需要知道.

對於一個對象,對外界開放一個接口,調用接口時,內部進行的操作,不需要讓外界知道.隱藏了內部的一些實現細節.這是對方法的封裝.

生活中的封裝很常見:電視機,開電源 一個動作
[隱藏的內部動作: 觸發顯像管,接線無線電信息,調頻 等等]
洗衣機:扔衣服,通電.[自動加水,洗,漂,脫水]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章