標籤:http 使用 io strong 2014 ar cti div
類型的存取控制通過使用修飾符允許開發人員對類中成員的訪問進行限制。這是PHP5的新特性,也是OOP語言中的重要特性,大多數OOP語言都已支援此特性。PHP5支援如下三種存取修飾詞,在類的封裝中我們已經介紹過了兩種。在這裡總結一下,存取控制修飾符包括public(公有的、預設的)、privat(私人的)和protected(受保護的)三種哦。他們的作用及其之間的區別如下表所示:
①公有的存取修飾詞public
使用這種修飾符則類中的成員將沒有訪問限制,所有的外部成員都可以訪問這個類中的成員,在PHP5之前的所有版本中,PHP中類的成員都是public的。
②私人的存取修飾詞private
當類中的成員被定義為private,對於同一個類裡所有成員都沒有訪問限制,但對於該類的外部代碼是不允許改變甚至操作的,對於該類的子類,也不能訪問private修飾的成員。代碼如下所示:
| 123456789101112131415161718192021 |
<?php //聲明一個類作為父類使用,將它的成員都聲明為私人的 class MyClass { private $var1=100; private function printHello(){ echo "hello<br>"; } } //聲明一個Myclass類的子類師徒訪問父類中的私人成員 class MyClass2 extends MyClass{ function useProperty(){ echo "輸出從父類繼承過來的成員屬性值".$this ->var1."<br>"; $this ->printHello(); } } $subObj = new MyClass2(); $subObj -> useProperty(); //調用子類對象中的方法實現對父類私人成員的訪問?> |
在上面的代碼中聲明了一個類MyClass,在類中聲明了一個私人的成員屬性和一個私人的成員方法,又聲明了一個類MyClass2繼承類MyClass,並在子類MyClass2中訪問父類中的私人成員。但父類中的私人成員只能在它的本類中使用,所以訪問出錯。
③保護的存取修飾詞protected
被修飾為protected的成員,對於該類的子類及子類的子類都有存取權限,可以進行屬性、方法的讀寫操作。但不能被該類的外部代碼訪問,該子類的外部代碼也不具有方額外呢其屬性和方法的許可權。將上例中父類的存取權限改為protected修飾,就可以在子類中訪問父類中的成員了,但在類的外部也是不能訪問的,所以也可以完成對對象的封裝的目的。代碼如下所示:
| 12345678910111213141516171819202122 |
<?php class MyClass { protected $var1=100; protected function printHello(){ echo "hello<br>"; } } //聲明一個Myclass類的子類師徒訪問父類中的保護成員 class MyClass2 extends MyClass{ function useProperty(){ echo "輸出從父類繼承過來的成員屬性值".$this ->var1."<br>"; $this ->printHello(); } } $subObj = new MyClass2(); $subObj -> useProperty(); //調用子類對象中的方法實現對父類私人成員的訪問 echo $subObj ->var1; //試圖訪問類中受保護的成員,結果出錯?> |
在上例中,將類MyClass中的成員使用protected修飾符設定為保護的,就可以在子類中直接存取。但在子類外部去訪問protected修飾的成員則出錯。
>> 本文固定連結: http://php.ncong.com/php_course/oop/fangwenlei.html
>> 轉載請註明: 恩聰php 2014年07月24日 於 恩聰PHP學習教程 發表