php _autoload自动加载类与机制分析
2015-01-24信息快讯网
在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是OO设计的基本思想之一
在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可test.class.php
<?php class abc{ function __construct() { echo 'www.hzhuti.com; } } ?>
load.php
代码如下
<?php class LOAD { static function loadClass($class_name) { $filename = $class_name.".class.php"; if (is_file($filename)) return include_once $filename; } } /** * 设置对象的自动载入 * spl_autoload_register ― Register given function as __autoload() implementation */ spl_autoload_register(array('LOAD', 'loadClass')); $a = new Test();//实现自动加载,很多框架就用这种方法自动加载类 ?>
__autoload()
在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,一个很大的烦恼是不得不在每个类文件开头写一个长长的包含文件的列表。我们能不能在用到什么类的时候,再把这个类所在的 php 文件导入呢?
为此,PHP 提供了 __autoload() 方法,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
__autoload() 方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应,如 Person.php ,对应的类名就是 Pserson 。
下面看个完整的实例
class ClassA{ public function __construct(){ echo “ClassA load success!”; } } //定义一个类ClassA,文件名为ClassA.php class ClassA{ public function __construct(){ echo “ClassA load success!”; } } class ClassB extends ClassA { public function __construct(){ //parent::__construct(); echo “ClassB load success!”; } } //定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA class ClassB extends ClassA { public function __construct(){ //parent::__construct(); echo “ClassB load success!”; } }
定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
function __autoload($classname){ $classpath=”./”.$classname.'.php'; if(file_exists($classpath)){ require_once($classpath); } else{ echo ‘class file'.$classpath.'not found!'; } } $newobj = new ClassA(); $newobj = new ClassB();
探讨PHP删除文件夹的三种方法
如何用php获取文件名后缀
深入php多态的实现详解
深入PHP autoload机制的详解
定义php常量的详解
PHP autoload与spl_autoload自动加载机制的深入理解
PHP register_shutdown_function函数的深入解析
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
spl_autoload_register与autoload的区别详解
phpcms模块开发之swfupload的使用介绍
php中使用__autoload()自动加载未定义类的实现代码
Zend的AutoLoad机制介绍
php后台多用户权限组思路与实现程序代码分享
php 文本文件的读取效率
php+iframe实现隐藏无刷新上传文件
PHP中集成PayPal标准支付的实现方法分享
PHP中call_user_func_array()函数的用法演示
PHP高级对象构建 多个构造函数的使用
PHP __autoload函数(自动载入类文件)的使用方法
PHP函数spl_autoload_register()用法和__autoload()介绍
PHP中创建空文件的代码[file_put_contents vs touch]
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
PHP spl_autoload_register实现自动加载研究
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
zend api扩展的php对象的autoload工具
PHP的autoload自动加载机制使用说明