1. 首页 > 经验  > 正文

魔术方法

魔术方法

在 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:
<?phpclassSportObject{private$type='';publicfunction__get($name){if(isset($this->$name)){echo'变数'.$name.'的值为:'.$this->$name.'<br>';}else{echo'变数'.$name.'未定义,初始化为0<br>';$this->$name=0;}}publicfunction__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:
<?phpclassSportObject{private$type='';publicfunction__get($name){if(isset($this->$name)){echo'变数'.$name.'的值为:'.$this->$name.'<br>';}else{echo'变数'.$name.'未定义,初始化为0<br>';$this->$name=0;}}publicfunction__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*/classExample{publicstatic$link;//在类实例化的时候自动载入__construct这个方法publicfunction__construct($localhost,$username,$password,$db){self::$link=mysql_connect($localhost,$username,$password);if(mysql_errno()){die('错误:'.mysql_error());}mysql_set_charset('uTF.htm target=_blank class=infotextkey>TF8');mysql_select_db($db);}/***通过__construct连结好资料库然后执行sql语句......*///当类需要被删除或者销毁这个类的时候自动载入__destruct这个方法publicfunction__destruct(){echo'<pre>';var_dump(self::$link);mysql_close(self::$link);var_dump(self::$link);}}$mysql=newExample('localhost','root','root','test');
例3输出结果为:
resource(2) of type (mysql link)
resource(2) of type (Unknown)

本文由'奉天向兰'发布,不代表演示站立场,转载/删除联系作者,如需删除请-> 关于侵权处理说明