在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 | 钱哪里去了我也不知道. |