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 相关文章推荐
第十一节--重载
Nov 16 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
php实现求相对时间函数
Jun 15 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 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
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
js对象转json数组的简单实现案例
2014/02/28 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
json的结构与遍历方法实例分析
2017/04/25 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python几种常见算法汇总
2020/06/02 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
Python调用飞书发送消息的示例
2020/11/10 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
毕业生就业自荐信
2013/12/04 职场文书
运动会邀请函范文
2014/02/06 职场文书
社会实践活动总结报告
2014/04/29 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
自主招生自荐信范文
2015/03/04 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
投诉信格式范文
2015/07/02 职场文书
申请吧主发表的感言
2015/08/03 职场文书
少先队中队工作总结
2015/08/14 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
Python实现双向链表
2022/05/25 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL