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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
substr()函数中文版
Oct 09 PHP
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php与paypal整合方法
Nov 28 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 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 已经成熟
2006/12/04 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
PHP中cookie知识点学习
2018/05/06 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
跟老齐学Python之print详解
2014/09/28 Python
学习python类方法与对象方法
2016/03/15 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
机器学习python实战之手写数字识别
2017/11/01 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
迟到检讨书5000字
2014/01/31 职场文书
支部组织生活会方案
2014/06/10 职场文书
会计岗位说明书
2014/07/29 职场文书
十佳少年事迹材料
2014/12/25 职场文书
我的中国梦主题班会
2015/08/14 职场文书
人事任命书范本
2015/09/21 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
防止web项目中的SQL注入
2021/12/06 MySQL