php魔術方法

來源:互聯網
上載者:User

標籤:php 魔術方法

<?php/** 官方文檔:http://php.net/manual/zh/language.oop5.magic.php*/class magic {        public $a = array(1);    protected $b = array(2);    private $c = array(3);    public $d = ‘88‘;    public $e = array(‘huazi‘=>55);    /**     * 構造方法      * 當類被實力化時就會被出發此方法     * 該方法就不用示範了     */    function __construct()    {        echo ‘構造方法:__construct()<br>‘;    }            /**     * 對象被序列化時會先出發此方法      * 如果沒有此魔術方法 會把 類屬性 $a,$b,$c 序列化     * 此方法可以指定那些屬性被序列化     */    public function __sleep()     {        return array( ‘a‘ ,  ‘b‘ );    }            /**     * 對象被還原序列化時會先出發此方法     */    public function __wakeup()     {        echo 1;    }        /**     * 方法用於一個類被當成字串時應怎樣回應。例如 echo $obj; 應該顯示些什麼。     * 此方法必須返回一個字串,否則將發出一條 E_RECOVERABLE_ERROR  層級的致命錯誤     */    public function __toString()    {        return ‘echo 對象?<br>‘;    }            /**     * 自 PHP 5.1.0 起當調用 var_export()  匯出類時,此靜態 方法會被調用。      * 本方法的唯一參數是一個數組,其中包含按 array(‘property‘ => value, ...) 格式排列的類屬性。     */    public static function __set_state($array)     {        return $array[‘d‘];    }            /**     * PHP 5 引入了解構函式的概念,這類似於其它物件導向的語言,     * 如 C++。解構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。      *      * 該方法就不用示範了     */    public function __destruct()    {        //echo 55;    }            /**     * 在對象中調用一個不可存取方法時,__call() 會被調用     */    public function __call($name, $arguments) {        echo ‘__call() : ‘;        // 注意: $name 的值區分大小寫        var_dump($name);        var_dump($arguments);        echo ‘<br>‘;        if( $name == ‘abc‘ )        {            $this->$name();        }    }    private function abc()    {        echo ‘999<br>‘;    }            /**     * 用靜態方式中調用一個不可存取方法時,__callStatic() 會被調用。      */    public static function  __callStatic ( $name ,  $arguments )     {        echo ‘__callStatic() : ‘;        // 注意: $name 的值區分大小寫        var_dump($name);        var_dump($arguments);        echo ‘<br>‘;    }        /**     * 在給不可訪問屬性賦值時,__set() 會被調用。      */    public function __set( $name,$val )    {        echo ‘__set : 方法<br>‘;        $this->$name = $val;    }            /**     * 讀取不可訪問屬性的值時,__get() 會被調用。       */    public function __get( $name )    {        echo ‘__get : 方法<br>‘;        return $this->$name;    }            /**     * 判斷屬性是否存在時被調用     */    public function __isset($name)     {        echo ‘__isset : 方法<br>‘;        return isset( $this->e[$name] );    }            /**     * 當對不可訪問屬性調用 unset()  時,__unset() 會被調用。      */    public function __unset($name)    {        echo ‘__unset : 方法<br>‘;        unset( $this->$name );        var_dump($name);    }            /**     * 對象被複製時被調用的     */    public function __clone()    {        echo ‘__clone : 方法‘;        echo ‘: 被複製了<br>‘;    }            /**     * 當嘗試以調用函數的方式調用一個對象時,__invoke() 方法會被自動調用。      */    public function  __invoke ( $x )     {        echo ‘__invoke : 方法 <br>‘;         var_dump ( $x );    }}$ob = new magic();/** * __sleep() 案例 * var_dump(serialize($ob)); *//** * __wakeup 案例 * $ser = serialize($ob); * unserialize($ser); *//** * __toString 案例 * echo $ob; *//** * __set_state 案例 手冊裡 * eval(‘$b = ‘.var_export($ob,true).‘;‘); * var_dump($b); *//** * __call 案例 * $ob->meiyou(); * $ob->abc(1,2); *//** * __callStatic 案例  * magic::kao(22); *//** * __set 案例 * print_r($ob); * $ob->c=2; * print_r($ob); *//** * __get 案例 * print_r($ob->c); *//** * __isset 案例 * var_dump( isset($ob->huazi) ); *//** * __unset 案例 * unset($ob->b); * print_r($ob); *//** * __clone 案例 * $c = clone $ob; *//** * __invoke 案例 * $ob(‘hehe‘); */class a{    function __construct(){            }    function __destruct(){            }    function __call( $name,$val ){            }    static function __callStatic($name, $arguments) {    }    function __get($name){            }    function __set($name,$val){            }    function __unset($name){            }    function __isset($name){            }    function __toString() {    }    function __set_state($array) {    }    function __invoke(){            }    function __clone(){            }    function __sleep(){    }    function __wakeup(){    }    }


php魔術方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.