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 相关文章推荐
example2.php
Oct 09 PHP
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
PHP防CC攻击实现代码
Dec 29 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
PHP多文件上传实例
Jul 09 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP自动识别当前使用移动终端
May 21 PHP
php经典趣味算法实例代码
Jan 21 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入门基础之php代码写法
2011/12/30 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
Python引用传值概念与用法实例小结
2017/10/07 Python
python opencv之SIFT算法示例
2018/02/24 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
个人简历的自荐信
2013/10/23 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
农贸市场管理制度
2014/01/31 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
2014年妇女工作总结
2014/12/06 职场文书
服务员岗位职责
2015/02/03 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
郭明义观后感
2015/06/08 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers