本篇文章主要講述的是外部調用類的私有屬性,具有一定的參考價值,感興趣的朋友可以了解一下,希望能夠幫到你。
外部調用類的私有屬性
先來了解一下PHP類中的__get和__set函數
當試圖獲取一個不可達屬性時,類會自動調用__get函數。
當試圖設置一個不可達屬性時,類會自動調用__set函數。
首先,來看一下__get函數,先來獲取一個可達屬性試試:
- <?php
- class A{
- public $a=1;
- private $b=2;
- function __get($name){
- echo 'you can get '.$name;
- //Vevb.com
- }
- }
- $dy = new A();
- echo $dy->a;
- ?>
看一下它的返回:
1
沒有問題,沒有調用__get函數,現在我來訪問一個私有的不可達屬性:
- <?php
- class A{
- public $a=1;
- private $b=2;
- function __get($name){
- echo 'you can get '.$name;
- //Vevb.com
- }
- }
- $dy = new A();
- echo $dy->b;
- ?>
會發現:
you can get b
說明這里調用了__get函數,我再來看一下__set函數,同樣也是先使用可達的public屬性:
- <?php
- class A{
- public $a;
- private $b;
- function __set($name,$val){
- echo 'you can get '.$name.$val;
- }
- }
- $dy = new A();
- $dy->a = 1;
- echo $dy->a;
- ?>
看一下輸出:
1
使用成功,沒有問題,接著我們來使用私有屬性:
- <?php
- class A{
- public $a;
- private $b;
- function __set($name,$val){
- echo 'you can get '.$name.$val;
- }
- }
- $dy = new A();
- $dy->b = 1;
- echo $dy->b;
- ?>
這時看到:
you can get b1
PHP Fatal error: Cannot access private property A::$b in /usercode/file.php on line 11
這里調用了__set函數并提示我們不能使用類的私有屬性。
現在來通過__set函數實現外部使用私有屬性:
- <?php
- class A{
- public $a;
- private $b;
- function __set($name,$val){
- $this->$name=$val;
- }
- function B(){
- echo $this->b;
- }
- }
- $dy = new A();
- $dy->b = 1;
- $dy->B();
- ?>
看一下輸出:
1
說明使用成功。
新聞熱點
疑難解答