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点来听课.至于后面,老师的备课,拉网线,等等,你们不需要知道.

对于一个对象,对外界开放一个接口,调用接口时,内部进行的操作,不需要让外界知道.隐藏了内部的一些实现细节.这是对方法的封装.

生活中的封装很常见:电视机,开电源 一个动作
[隐藏的内部动作: 触发显像管,接线无线电信息,调频 等等]
洗衣机:扔衣服,通电.[自动加水,洗,漂,脱水]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值