PHP中spl_autoload_register()和__autoload()区别分析


Posted in PHP onMay 10, 2014

关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法:

//__autoload用法
function __autoload($classname)
{
    $filename = "./class/".$classname.".class.php";
    if (is_file($filename))
    {
        include $filename;
    }
}//spl_autoload_register用法
spl_autoload_register('load_class');
function load_class($classname)
{
    $filename = "./class/".$classname.".class.php";
    if (is_file($filename))
    {
        include $filename;
    }
}

使用spl_autoload_register()的好处是不可言喻的:
(1)自动加载对象更加方便,很多框架都是这样做的:

class ClassAutoloader {
    public function __construct() {
        spl_autoload_register(array($this, 'loader'));
    }
    private function loader($className) {
        echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
        include $className . '.php';
    }
}$autoloader = new ClassAutoloader();
$obj = new Class1();
$obj = new Class2();

(2)你要知道__autoload()函数只能存在一次啊,spl_autoload_register()当然能注册多个函数

function a () { 
    include 'a.php';
} 
function b () { 
    include 'b.php';
} 
spl_autoload_register('a'); 
spl_autoload_register('b');

(3)SPL函数很丰富,提供了更多功能,如spl_autoload_unregister()注销已经注册的函数、spl_autoload_functions()返回所有已经注册的函数等。

PHP中spl_autoload_register()和__autoload()区别分析

详见PHP参考手册:关于SPL函数列表.

注意:

如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload() 或 spl_autoload_call()

/** 
*__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法 
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list 
*/ 
spl_autoload_register( '__autoload' );
PHP 相关文章推荐
几个学习PHP的网址
Nov 25 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 #PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 #PHP
php判断电脑访问、手机访问的例子
May 10 #PHP
php计算程序运行时间的简单例子分享
May 10 #PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 #PHP
php递归删除目录下的文件但保留的实例分享
May 10 #PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 #PHP
You might like
MVC模式的PHP实现
2006/10/09 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
zend framework重定向方法小结
2016/05/28 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
href下载文件根据id取url并下载
2014/05/28 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
javascript常用函数(2)
2015/11/05 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
js实现简单图片拖拽效果
2021/02/22 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python通过post提交数据的方法
2015/05/06 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
银行职员思想汇报
2013/12/31 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
文明村镇申报材料
2014/05/06 职场文书
物理课外活动总结
2014/08/27 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript