php自动加载为什么autoload被抛弃了

发布于 2022-09-11 20:36:43 字数 222 浏览 7 评论 0

查看了许多资料
1 如果100个文件 都要用 都要一个一个include进来
所以有了这种autoload加载
但是看到网上说 这种autoload 有缺点就是只能加载一次 这加载一次怎么理解呢?
如果我在autoload对文件名字作判断 然后include不同目录的php文件不也可以吗?
我主要想知道 这个autoload 如何 过渡到spl_autoload 还有 只能加载一次这个怎么说?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漫雪独思 2022-09-18 20:36:43

spl_autoload_register和__autoload都是PHP自动加载的两种方式。自从spl_autoload_register出现后,已经逐渐替代了__autoload.虽然二者实现的最终功能一样,但是不同的是spl_autoload_register可以注册多种加载机制。而__autoload只可以定义一次。

比如,现在需要加载目录A和目录B内的类,A目录中定义所有文件名和类名一致,B目录下的文件名和类名也一样,但是会多一个和类名一样的目录,比如类MapA,存放在目录b/MapA/MapA.php,那么A和B注册加载机制不一样,如果用__autoload就需要多从判断,而spl_autoload_register分开写两种注册机制,都进行注册就好了。其实只是spl_autoload_register比__autoload更灵活而已。

function load1($className)
{
    echo 1;
    if (is_file($className . '.php')) {
        require $className . '.php';
    }
}
function load2($className)
{
    echo 2;
    if (is_file('./app/' . $className . '.php')) {
        require './app/' . $className . '.php';
    }
}

//注册了2个
spl_autoload_register('load1');
spl_autoload_register('load2');
$db = new DB(); 
$info = new Info(); 
无声静候 2022-09-18 20:36:43

spl_autoload_register内部维护了一个队列,后注册的在队首,加载类的时候依次调用队列中的加载函数,直至类加载成功

详解请参考PHP autoload 机制详解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文