首先
__get()函數:__get($name);
第一點:__get() 這個方法不是默認存在的, 而是我們手工添加到類裏面去的,像構造方法(__construct())一樣,類裏面添加了纔會存在。
第二點:當通過對象指針來獲取private變量的值時,如果類中沒有添加__get()就會報錯,如果添加了,就會自動調用這個函數,將對象指針後面所要獲取的那個變量的值當做形參賦給$name,然後執行函數體裏面的內容,然後函數作爲用對象指針引用的那個private變量的值並可用echo進行輸出。
__set()函數:__set($name,$value);
第一點:同上第一點。
第二點:當在類外將值賦給private變量時,如果類中沒有添加__set()就會報錯,如果添加了,就會自動調用這個函數,將對象指針後面所要獲取的那個變量的值當做形參賦給$name,將要賦給變量的值當做實參傳給形參$value,然後執行函數體裏面的內容。
我看了網上的一些文章,總結出以上2點,然後在敲代碼的過程中總結出一句話:其實這兩個函數就是個系統自動調用的類函數。
所以,其實他給我們獲取和修改private變量提供了一個“後門”,由於它是類函數所以可以取類中的任何屬性的變量,然後還要注意這裏形參的值如果改變不會影響實參的值得,如果要改變的話要通過其他方式,比如用$this關鍵字,或者把形參設爲&$name。
以下是簡單的例子:
- <?php
- class test{
- private $name="11111";
- private function __get($name1){
- echo "--------"."<br>"; //相當於$this->name(實參的值爲name傳給形參$name1)
- return $this->$name1."<br>";
- }
- private function __set($name2,$value){
- echo "======"."<br>";
- return $this->$name2=$value."<br>";
- }
- }
- $p = new test();
- echo $p->name;
- echo $p->name="2222222";
- ?>
結果:
--------
yuwei
======
xiaowei
php菜鳥,希望能合各位php高手交流學習,qq:1309782600