魔術方法

在 PHP 中以兩個下劃線開頭的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被稱為"魔術方法"(Magic methods)。

集合涵義,包含成員,__set(),__get(),__construct(),__destruct(),

集合涵義

PHP中以兩個下劃線開頭的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被稱為"魔術方法"(Magic methods)。如果希望PHP調用這些魔術方法,首先必須在類中定義,否則PHP不會執行未創建的魔術方法。

注意:PHP 將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法。所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴。

包含成員

__set()

簡介
當程式試圖寫入一個不存在或者不可見的成員變數時,PHP就會執行__set()方法。__set()方法包含兩個參數,分別表示變數名稱和變數值,兩個參數都不可省略。
實例1:
<?phpclass SportObject{    private $type='';    public function __get($name){        if(isset($this->$name)){            echo'變數'.$name.'的值為:'.$this->$name.'<br>';        }else{            echo'變數'.$name.'未定義,初始化為0<br>';            $this->$name=0;        }    }    public function __set($name,$value){        if(isset($this->$name)){            $this->$name=$value;            echo'變數'.$name.'賦值為:'.$value.'<br>';        }else{            $this->$name=$value;            echo'變數'.$name.'被初始化為:'.$value.'<br>';        }    }}    $MyComputer=newSportObject();    $MyComputer->type='DIY';    $MyComputer->type;?>
例1輸出結果為:
變數type賦值為:DIY
變數type的值為:DIY

__get()

簡介:
當程式試圖調用一個未定義或不可見的成員變數時,可以通過__get()方法來讀取變數值。__get()方法有一個參數,表示要調用的變數名。
實例2:
<?phpclass SportObject{    private $type='';    public function__get($name){        if(isset($this->$name)){            echo'變數'.$name.'的值為:'.$this->$name.'<br>';        }else{            echo'變數'.$name.'未定義,初始化為0<br>';            $this->$name=0;        }    }    public function __set($name,$value){        if(isset($this->$name)){            $this->$name=$value;            echo'變數'.$name.'賦值為:'.$value.'<br>';        }else{            $this->$name=$value;            echo'變數'.$name.'被初始化為:'.$value.'<br>';        }    }}    $MyComputer=newSportObject();    $MyComputer->name;?>
例2輸出結果為:
變數name未定義,初始化為0
變數name被初始化為:0

__construct(),__destruct()

簡介:
- 在每次創建新對象時先調用此方法
-對象的所有引用都被刪除或者當對象被顯式銷毀時執行
實例3:
<?php/** * 清晰的認識__construct() __destruct */class Example {    public static $link;    //在類實例化的時候自動載入__construct這個方法    public function __construct($localhost, $username, $password, $db) {        self::$link = mysql_connect($localhost, $username, $password);        if (mysql_errno()) {            die('錯誤:' . mysql_error());        }        mysql_set_charset('utf8');        mysql_select_db($db);    }     /**     * 通過__construct連結好資料庫然後執行sql語句......     */      //當類需要被刪除或者銷毀這個類的時候自動載入__destruct這個方法    public function __destruct() {        echo '<pre>';        var_dump(self::$link);        mysql_close(self::$link);        var_dump(self::$link);    }}$mysql = new Example('localhost', 'root', 'root', 'test');
例3輸出結果為:
resource(2) of type (mysql link)
resource(2) of type (Unknown)

相關詞條

熱門詞條

聯絡我們