新闻资讯
看你所看,想你所想

魔术方法

魔术方法

在 PHP 中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被称为"魔术方法"(Magic methods)。

集合涵义

在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)

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com