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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
php四种定界符详解
Feb 16 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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字符串的编码问题的详细介绍
2013/04/27 PHP
php利用事务处理转账问题
2015/04/22 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
JavaScript 乱码问题
2009/08/06 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
利用python求相邻数的方法示例
2017/08/18 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
小结Python的反射机制
2020/09/28 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
肯尼迪就职演说稿
2013/12/31 职场文书
消防安全管理制度
2014/02/01 职场文书
体育活动总结范文
2014/05/04 职场文书
社区党建工作总结2015
2015/05/13 职场文书
认识实习感想
2015/08/10 职场文书