您当前的位置: 首页 > 网站编程 > PHP教程 > PHP的魔术方法学习

PHP的魔术方法学习

作者:不详 来源:网络 发布时间: 2014-08-20 13:48 点击:
__set_state() var_export可以把一个集合导出为一串字符串,这些字符串是一些可执行的PHP代码。在php5.1.0的面向对象里,引入了一个叫__set_state的静态方法来使得var_export支持对象实例的导出。当用var_export导出一个实例的时候,所导出字符串里,是调用这个静态方

PHP的魔术方法学习

  __set_state()

  var_export可以把一个集合导出为一串字符串,这些字符串是一些可执行的PHP代码。在php5.1.0的面向对象里,引入了一个叫__set_state的静态方法来使得var_export支持对象实例的导出。当用var_export导出一个实例的时候,所导出字符串里,是调用这个静态方法的代码。这个方法有一个参数,为包含所导出的实例的所有成员属性的一个数组。有点抽象,看下面的例子吧。

  <?phpclass o{ public $skill=’php’; public static function __set_state($arr) {  foreach ($arr as $k => $v) {   $obj->$k = $v;  }         return $obj; }}$i = new o;$i->age = 21;eval(’$b = ’.var_export($i,true).’;’);//这里的true表示var_export返回所导出的字符串,而不是把它打印出来。print_r($b);/*输出:stdClass Object(    [skill] => php    [age] => 21)*/?>

  __clone()

  在php5里,对象间的赋值总是以地址引用来传递的。例如下面这个例子,将会输出66,而不是55.

  <?phpclass o{ public $age = 55;}$i   = new o;$i2 = $i;$i->age = 66;echo $i2->age;?>

  如果要以实际值来传递,则需要用到clone关键词。

  <?phpclass o{ public $age = 55;}$i   = new o;$i2 = clone $i;$i->age = 66;echo $i2->age;//输出55?>

  但是,这里clone的只是$i这个实例。如果$i的某个成员属性也是个实例,那么这个成员属性还是会以引用方法被传递到$i2的。例如下面这个例子:

  <?phpclass o{ public $age = 55; public $sub = null;}class o2{ public $p=1;}$i   = new o;$i->sub=new o2;$i2 = clone $i;$i->sub->p=5;echo $i2->sub->p;?>

  最后输出的是5,而不是1。也就是说,$i和$i2虽然不是指向的虽然不是同一个实例,但是它们的成员属性$sub却是指向同一个实例。这时候,我们必须借助__clone这个方法来对$sub进行复制。在o类里,加入__clone()方法。如下:

  <?phpclass o{ public $age = 55; public $sub = null; public function __clone() {  $this->sub=clone $this->sub; }}//......?>

  这样,在echo $i2->sub->p;的时候,输出的就是传递时候的值1了。

  __autoload()

  当创建一个实例化的时候,如果对应的类不存在,__autoload()将会被执行,这个函数有一个参数,为所要创建的实例对应的类名。在下面的例子里,当创建一个test类的实例的时候,如果/home/surfchen/project/auto.php存在,则require这个文件,否则打印一个Class test Not Found的错误,并中止当前脚本。
分享到:
本文"PHP的魔术方法学习"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4