dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7825|回复: 64

[php知识] 开发框架必备知识 spl_autoload_register()和__autoload()区别

  [复制链接]
  • TA的每日心情

    2024-11-19 20:46
  • 签到天数: 244 天

    [LV.8]以坛为家I

    4434

    主题

    1459

    帖子

    1万

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    10734
    发表于 2019-1-17 19:39:50 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    这篇文章主要介绍了spl_autoload_register()和__autoload()区别,需要的朋友可以参考下
    关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法:
    代码如下:

    [PHP] 纯文本查看 复制代码
    //__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)自动加载对象更加方便,很多框架都是这样做的:


    代码如下:

    [PHP] 纯文本查看 复制代码
    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()当然能注册多个函数


    代码如下:

    [PHP] 纯文本查看 复制代码
    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()返回所有已经注册的函数等。


    2014510170724726.jpg




    详见PHP参考手册:关于SPL函数列表.

    注意:

    如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
    spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload() 或 spl_autoload_call()


    代码如下:
    [PHP] 纯文本查看 复制代码
    /** 
    *__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法 
    * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list 
    */ 
    spl_autoload_register( '__autoload' ); 


    回复

    使用道具 举报

    该用户从未签到

    37

    主题

    7807

    帖子

    994

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    994

    发表于 2019-1-21 11:33:45 | 显示全部楼层
    不知该说些什么。。。。。。就是谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    42

    主题

    7729

    帖子

    964

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    964

    发表于 2019-1-22 12:08:33 | 显示全部楼层
    找到好贴不容易,我顶你了,谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    7850

    帖子

    1098

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1098

    发表于 2019-1-25 18:29:01 | 显示全部楼层
    没看完~~~~~~ 先顶,好同志
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    3461

    帖子

    2

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    2

    发表于 2019-1-29 18:49:52 | 显示全部楼层
    这是什么东东啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3454

    帖子

    -12

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -12

    发表于 2019-1-30 15:16:20 | 显示全部楼层
    正需要,支持楼主大人了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    7917

    帖子

    1069

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1069

    发表于 2019-2-4 08:11:06 | 显示全部楼层
    支持一下:lol
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    7649

    帖子

    956

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    956

    发表于 2019-2-16 11:07:59 | 显示全部楼层
    我是来刷分的,嘿嘿
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3454

    帖子

    -12

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -12

    发表于 2019-2-18 12:48:50 | 显示全部楼层
    小手一抖,钱钱到手!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-20 11:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    878

    主题

    4343

    帖子

    3987

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    3987

    发表于 2019-2-19 16:34:05 | 显示全部楼层
    有道理。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-12-23 23:38 , Processed in 0.142817 second(s), 44 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表