1. 程式人生 > >php常用的魔術方法

php常用的魔術方法

存儲空間 關閉 spa ext 函數 屬性和方法 utf-8 isset method

__construct:構造函數,一旦創建對象都就會自動調用

__call:當調用了未定義的方法時會自動觸發

__set:當給類外部不可訪問的屬性設置值時會自動觸發

__get:當獲取類外部不可訪問的屬性時會自動觸發

__isset:當對類外部不可訪問的屬性使用了isset()或empty()時會自動觸發

__unset:當對類外部不可訪問的屬性使用了unset()時會自動觸發

__destruct:當對象結束其生命周期時就會自動觸發

<?php 
header("content-type:text/html;charset=UTF-8");
class Magic{
    private $testGet;       //私有測試__get魔術方法的屬性
    private $testSet;       //私有測試__set魔術方法的屬性
    private $testIsset;     //私有測試__isset魔術方法的屬性
    private $testUnset;     //私有測試__unset魔術方法的屬性
    public static $a=1;     //私有用於測試__clone魔術方法的常量

    /**
     * 測試構成方法,創建新對象時先調用此方法
     */
    public function __construct(){
        echo static::$a+2;
        echo "這是構造函數"."<br>"."<br>";
    }

    /**
     * 測試isset方法,這是當不可訪問的屬性被調用了isset()或者empty()方法時會觸發
     */
    public function __isset($name){
        echo "對不可訪問屬性:".$name."調用 isset() 或 empty()"."<br>"."<br>";
    }

    /**
     * 測試unset方法,這是當不可訪問的屬性被調用了unset()方法時會觸發
     */
    public function __unset($name){
        echo "當對不可訪問屬性:".$name."調用unset()"."<br>"."<br>";
    }

    /**
     * 測試call方法,這是當調用了未定義的方法時會觸發
     */
    public function __call($method,$agrs){
        echo "調用了不存在的方法:".$method."<br>"."這是接收的參數:";
        print_r($agrs);
        echo "<br>"."<br>";
    }

    /**
     * 測試set方法,這是當不可訪問的屬性被設置時會觸發
     */
    public function __set($name,$data){
        echo "調用了不可設置的屬性:".$name."<br>"."參數為:".$data."<br>";
    }

    /**
     * 測試get方法,這是當不可訪問的屬性被訪問時會觸發
     */
    public function __get($name){
        echo "調用了不可獲取的屬性:".$name."<br>"."<br>";
    }

    /**
     * 測試clone方法,這是類被克隆時會觸發
     */
    public function __clone(){
        echo static::$a+1;
        echo "我被克隆了"."<br>"."<br>";
    }

    /**
     * 測試析構方法,這是當在腳本關閉時被調用
     */
    public function __destruct(){
        echo "這是析構函數";
    }
}


$test=new Magic(); //實例化Magic類,觸發構造函數

$test->callMethod(‘123‘);   //調用不存在的方法

$test->testSet=123;     //設置類外部不可訪問的屬性

$test->testGet;         //獲取類外部不可訪問的屬性

$test2=clone $test;     //克隆test類,開辟了另一份一模一樣的屬性和方法存儲空間,但相互不會影響
isset($test->testIsset);       //用isset執行類外部不可訪問的屬性
unset($test->testUnset);        //用unset執行類外部不可訪問的屬性

php常用的魔術方法