當試圖獲取一個不可達變量時,類會自動調用__get。
同樣的,當試圖設置一個不可達變量時,類會自動調用__set。
在網站中,這兩個並不是什么非用不可的函數。
例如:
Class Test
{
private $a = 1;
private $b = 2;
public $c = 3;
public function __get($vname)
{
return "you can not get";
}
public function __set($vname,$value)
{
echo "you can not set";
}
}
$t = new Test;
echo $t->a;//這里試圖要打印出私有變量
$t->b=3;//這里試圖要把私有變量進行設置
想要直接對私有變量操作,當然是做不到的。
於是在讀取的時候,調用__get(),輸出“you can not get”;
在設置的時候,調用__set(),輸出“you can not set”。
順便提一下,__get()和__set()函數要設置為public,要不然會Warning。
__get()和__set()函數定義時的參數分別為1個和2個,不管函數中到底有沒用,都是不可省略的。
通過修改__get()和__set()函數內部的語句,就可以實現在外部調用類的私有變量。
例如:
private __get($vname)
{
return $this->$vname;
}
如果$vname的值是a,那么就返回了正確的值。
__set()也同理。
public function __set($vname,$value)
{
$this->$vname = $value;
}