php中__get()和__set()函數學習筆記和實例說明!

首先

__get()函數:__get($name);

第一點:__get() 這個方法不是默認存在的, 而是我們手工添加到類裏面去的,像構造方法(__construct())一樣,類裏面添加了纔會存在。

第二點:當通過對象指針來獲取private變量的值時,如果類中沒有添加__get()就會報錯,如果添加了,就會自動調用這個函數,將對象指針後面所要獲取的那個變量的值當做形參賦給$name,然後執行函數體裏面的內容,然後函數作爲用對象指針引用的那個private變量的值並可用echo進行輸出。
 
 
__set()函數:__set($name,$value);
 
第一點:同上第一點。
第二點:當在類外將值賦給private變量時,如果類中沒有添加__set()就會報錯,如果添加了,就會自動調用這個函數,將對象指針後面所要獲取的那個變量的值當做形參賦給$name,將要賦給變量的值當做實參傳給形參$value,然後執行函數體裏面的內容。
 
我看了網上的一些文章,總結出以上2點,然後在敲代碼的過程中總結出一句話:其實這兩個函數就是個系統自動調用類函數
 
所以,其實他給我們獲取和修改private變量提供了一個“後門”,由於它是類函數所以可以取類中的任何屬性的變量,然後還要注意這裏形參的值如果改變不會影響實參的值得,如果要改變的話要通過其他方式,比如用$this關鍵字,或者把形參設爲&$name。
 以下是簡單的例子:
  1. <?php  
  2.     class test{  
  3.         private $name="11111";  
  4.  
  5.         private function __get($name1){  
  6.             echo "--------"."<br>";                 //相當於$this->name(實參的值爲name傳給形參$name1)  
  7.             return $this->$name1."<br>";  
  8.         }  
  9.  
  10.         private function __set($name2,$value){  
  11.             echo "======"."<br>";  
  12.             return $this->$name2=$value."<br>";  
  13.         }  
  14.     }  
  15.  
  16.  
  17.  
  18.     $p = new test();  
  19.  
  20.     echo $p->name;  
  21.  
  22.     echo $p->name="2222222";  
  23. ?>  
 

結果:

--------
yuwei
======
xiaowei
 

 

 

php菜鳥,希望能合各位php高手交流學習,qq:1309782600

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章