PHP 面向对象:访问控制

在PHP5中,可以在类的属性和方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。

下面表格显示了访问的权限。

修饰符 同一个类中 子类中 全局
private Yes    
protected Yes Yes  
public Yes Yes Yes(默认)
Private的访问权限

private 不能直接被外部调用,只能由当前对象调用。

比如你可以借钱给别人,但不希望别人知道你钱包里面有多少钱。我们把它用private隐藏起来。

01 <!--private 演示<br>
02 private 不希望直接被外部调用.<br>
03 前面介绍过关于封装的内容.这里不再重复.<br>
04 比如你钱包里面的钱有多少不希望被别人看到.<br>
05 但你确有借钱给别人的方法.我们来这样写写试试.<br>-->
06 <?
07 class You {
08     private $youMoney = 1000;
09     //借出钱的方法
10     public function loan($number)
11     {
12         if($this->youMoney >= $number)
13         {
14             $this->youMoney = $this->youMoney - $number;
15             echo "好,这里借给你 $number 元,可是我也不多了.<br>";
16         }
17         else
18         {
19             echo "我无法借 $number 元给你,我没有这么多钱<br>";
20         }
21     }   
22 }
23 $you new You();
24 $you->loan(300); //第一次借钱
25 $you->loan(600); //第二次借钱
26 $you->loan(500); //第三次借钱
27 //你不能知道我钱包里面的钱数,那是我的隐私.
28 echo $you->youMoney; //这个语句会出现异常.似有变量不能被外界访问.
29 ?>

程序运行结果如下:

1 好,这里借给你 300 元,可是我也不多了.
2 好,这里借给你 600 元,可是我也不多了.
3 我无法借 500 元给你,我没有这么多钱
4  
5 Fatal error: Cannot access private property You::$youMoney in E:\PHPProjects\test.php on line 28
protected的访问权限

protected 修饰的属性和方法只能被子类调用。外界无法调用。

01 <!--protected 演示<br> protected 修饰的属性和方法只能被子类调用.-->
02 <?
03 class You {
04     protected $youMoney = 1000;
05     //借出钱的方法
06     public function loan($number){
07         if($this->youMoney >= $number){
08             $this->youMoney = $this->youMoney - $number;
09             echo "好,这里借给你 $number 元,可是我也不多了.<br>";
10         }else{
11             echo "我无法借 $number 元给你,我没有这么多钱<br>";
12         }
13     }   
14 }
15 // 继承后的类可以方法父类的protected属性.
16 class YouSelf extends You {
17     public function getMoney(){
18         return $this->youMoney;
19     }  
20 }
21 $youSelf new YouSelf();
22 $youSelf->loan(900); //借钱
23 echo "老婆,这里我还有.. ".$youSelf->getMoney()." 元";
24 //其他人就不允许问我了.
25 //echo youSelf->youMoney; //这个语句会出现异常.似有变量不能被外界访问.
26 ?>

程序运行结果如下:

1 好,这里借给你 900 元,可是我也不多了.
2 老婆,这里我还有.. 100 元
public的访问权限

数据的隐藏和封装是能够帮助我们保护数据的安全性。

Public 修饰的属性和方法,可以被无限制的调用。

嘿。。你的钱,不安全了。

01 <?
02 class You {
03     public  $youMoney = 1000;
04     //借出钱的方法
05     public function loan($number)
06     {
07         if($this->youMoney >= $number)
08         {
09             $this->youMoney = $this->youMoney - $number;
10             echo "好,这里借给你 $number 元,可是我也不多了.<br>";
11         }
12         else
13         {
14             echo "我无法借 $number 元给你,我没有这么多钱<br>";
15         }
16     }   
17 }
18 $you new You();
19 // 不用借钱,想拿就拿吧.
20 $you->youMoney = $you->youMoney - 5000;
21 echo "我现在只有".$you->youMoney;
22 echo "<br>钱哪里去了我也不知道.";
23 // 数据危险的太多了,通过封装可以保护数据.
24 ?>

程序运行结果如下:

1 我现在只有-4000
2 钱哪里去了我也不知道.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值