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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
我的论坛源代码(三)
Oct 09 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
轻松实现php文件上传功能
Feb 17 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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的简易冒泡法代码分享
2012/08/28 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP引用的调用方法分析
2016/04/25 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python数据结构之二叉树的建立实例
2014/04/29 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
python命令行工具Click快速掌握
2019/07/04 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Python实现疫情地图可视化
2021/02/05 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
EJB3.1都有哪些改进
2012/11/17 面试题
献爱心捐款倡议书
2014/05/14 职场文书
三八节标语
2014/06/27 职场文书
模范班主任事迹材料
2014/12/17 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA