PHP 類的魔術方法詳解

魔術方法:
 __construct() 構造函數 ,在實例化對象時被調用
 __distruct() 析構函數 ,對象結束是被調用
 __get() 屬性重載,在讀取不可訪問屬性的值是,會被調用
 __set() 屬性重載,在給不可訪問屬性賦值時,會被調用
 __isset() 屬性重載,在對不可訪問屬性調用isset()時,被調用
 __unset() 屬性重載,在對不可訪問屬性調用unset()時,被調用
 __clone() 克隆
 __toString 用於返回一個字符串,只有在直接使用echo 或print時才能生效
 __autoload() 自動加載類文件
 __sleep() 當對象串行化那一瞬間會調用該方法,
 __wakeup() 在反序列化操作那一瞬間會調用該方法

class myclass{

  protected $aa = 10; // 保護的屬性
  public $bb = 5;  // 公共屬性

  public  function __construct(){
    echo"構造函數";
  }
  public  function __destruct(){
    echo"析構函數函數";
  }
  public  function fun(){
    echo"普通函數";
  }

  public function __get($var){
    echo "獲取",$var,"屬性值";
  }


  public function __set($key,$val){
    echo "設置",$key,"的屬性值為:",$val;
  }

  public function __isset($var){
    echo "判斷是否有這個屬性:",$var;
  }

  public function __unset($var){
    echo "消除屬性:",$var;
  }

  public function __call($var,$arg){
    //$arg 為數組
    echo "調用不存在的",$var,"方法","參數為:";
    var_export($arg);
  }

  public function __toString(){
    return  "直接echo 或 print 輸出";
  }


}

$aa = new myclass(); // 調用 __construct 方法
$aa->fun();  // 正常調用
echo $aa->aa;  // 調用 __get 方法
echo $aa->bb;  // 正常調用 屬性 bb
$aa->aa = 15;  // 調用 __set 方法
var_dump(isset($aa->aa));  // 調用 __isset 方法
var_dump(isset($aa->bb));  // 正常判斷
unset($aa->bb);  // 正常消除
unset($aa->aa);  // 調用 __unset 方法
$aa->abc('fsdf','rrere','rewrwe'); // 調用 __call 方法
echo $aa; // 調用 __tostring 方法

 

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