当前位置:  编程技术>php

PHP中spl_autoload_register()和__autoload()区别分析

    来源: 互联网  发布时间:2014-08-26

    本文导语:  关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法: 代码如下://__autoload用法function __autoload($classname){    $filename = "./class/".$classname.".class.php";    if (is_file($filename))    {        include $filename;...

关于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函数,它必须显式注册到__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' );

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PHP形态分析库 phpMorphy
  • php探针不显示cpu、内存、硬盘信息原因分析
  • php的慢速日志引起的Mysql错误问题分析
  • php中数字0和空值的区别分析
  • PHP extract(数组拆分)作用分析
  • linux下使用crontab实现定时PHP计划任务失败的原因分析
  • php编码转换分析
  • PHP魔术引号所带来的安全问题分析
  • php浮点数精度用法分析
  • PHP框架Swoole定时器Timer特性分析
  • PHP匹配多行的正则表达式分析
  • PHP文件缓存内容保存格式实例分析
  • php构造函数与析构函数实例分析
  • PHP is_file与file_exists用法分析
  • php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
  • php魔术引号安全问题实例分析
  • Discuz7.2版的faq.php SQL注入漏洞分析
  • PHP中new static()与new self()的区别异同分析
  • PHP中array_map与array_column之间的关系分析
  • PHP 正则表达式分析RSS
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php通过socket_bind()设置IP地址代码示例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3