1. 程式人生 > >PHP 魔術方法之__set() __get() 方法

PHP 魔術方法之__set() __get() 方法

先看看官方文件的解釋

__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.

究竟用中文怎麼翻譯呢? inaccessible :n. 難達到;難接近;無法理解。
有程式碼有真相:

<?php
error_reporting(E_ALL);
class stu{
    private $a;
    private $b = 0;
    public $c;
    public
$d = 0; //這裡的 private 可以用 protected public 替代 private function __get($name) { return 123; } //這裡的 private 也可以用 protected public 替代 private function __set($name, $value) { echo "This is set function"; } } $s = new stu(); var_dump($s->a); //output: 123 var_dump($s
->b); //output: 123 var_dump($s->c); //output: null var_dump($s->d); //output: 0 var_dump($s->e); //output: 123 $s->a = 3; //output: This is set function $s->c = 3; //no output $s->f = 3; //output: This is set function ?>

結果:

如果沒有__get 方法,執行 var_dump(s>a)vardump(s->b) 會有致命的錯誤
如果沒有__get 方法,執行 var_dump(s

>e)noticee
總結:

  • 從一個難以訪問的屬性讀取資料的時候 __get() 方法被呼叫
  • 向一個難以訪問的屬性賦值的時候 __set() 方法被呼叫
  • 難以訪問包括:(1)私有屬性,(2)沒有初

參考網址: