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 相关文章推荐
基于文本的搜索
Oct 09 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
怎么在Windows系统中搭建php环境
Aug 31 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 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
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
护理专业自荐信范文
2014/02/26 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
安全保证书范文
2014/04/29 职场文书
环保建议书400字
2014/05/14 职场文书
化工工艺设计求职信
2014/06/25 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技