快速业务通道

又道PHP5中的魔术方法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23

  从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

  1、__get、__set

  这两个方法是为在类和他们的父类中没有声明的属性而设计的。

  ◆__get( $property ) 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。

  ◆__set( $property, $value ) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。

  这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

  2、__isset、__unset

  ◆__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法。

  ◆__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法。

  与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

  3、__call

  __call( $method, $arg_array ) 当调用一个未定义的方法是调用此方法。

  这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方​法,如果本类中不存在__call()方法就去找父类中的__call()方法。

  4、__autoload

  __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

  如果要定义一个全局的自动加载类,则必须用spl_autoload_register()方法将处理类注册到PHP标准库:

 

  1. <?php        
  2. class Loader        
  3. {        
  4. static function autoload_class($class_name)        
  5. {        
  6. //寻找正确的$class_name类,并引入,没有则抛出异常        
  7. }        
  8. }        
  9.        
  10. /**       
  11. *  设置对象的自动载入       
  12. *  spl_autoload_register — Register given function as __autoload() implementation       
  13. */       
  14. spl_autoload_register(array(‘Loader’, ‘autoload_class’));        
  15. $a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类  

  注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误,所以应该在函数本身做捕获。

  5、__construct、__destruct

  ◆__construct 构造方法,当一个对象创建时调用此方法,相对于PHP4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称。

  ◆__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源,析构函数允许你在使用一个对象之后执行任意代码来清除内存。当PH

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号