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 相关文章推荐
php基础知识:控制结构
Dec 13 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
使用PHPExcel导出Excel表
Sep 08 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程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
javascript如何写热点图
2015/12/08 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
对python:print打印时加u的含义详解
2018/12/15 Python
关于Python作用域自学总结
2019/06/10 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
python中实现词云图的示例
2020/12/19 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
销售人员中英文自荐信
2013/09/22 职场文书
办公室助理岗位职责
2013/12/25 职场文书
最新创业融资计划书
2014/01/19 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
司机岗位职责
2015/02/04 职场文书
医德医风学习心得体会
2016/01/25 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
Java数据结构之链表相关知识总结
2021/06/18 Java/Android