繁体   English   中英

spl_autoload没有调用第二个自动加载功能

[英]spl_autoload not calling second autoload function

我有一个spl_autoload被调用,但问题是第二个自动加载不执行,我无法弄清楚为什么。 使用此代码,脚本应该会死掉。 我从文件夹数组中删除类,自动加载将工作。 我的代码看起来像这样:

<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors','On'); 
/*** nullify any existing autoloads ***/
spl_autoload_register(null, false);
/*** specify extensions that may be loaded ***/
spl_autoload_extensions('.php');

function dataLoader($class) {
    foreach (array(PV_CORE.DS.'data'.DS, PV_CORE.DS.'system'.DS, PV_CORE.DS.'cms'.DS, PV_CORE.DS.'util'.DS,PV_CORE.DS.'components'.DS, PV_CORE.DS.'template'.DS) as $folder){
        if (is_file($folder.$class.'.php')) {
            include_once $folder.$class.'.php';
        }
    }//end foreach
}

function testLoader($class) {
    die();
    $filename = $class. '.php';
    $file =PV_CORE.DS.'data'.DS.$filename;
    if (!file_exists($file)) {
        return false;
    }
    require_once $file;
}

spl_autoload_register('dataLoader');
spl_autoload_register('testLoader');

你的代码有效但可能是一个误解。

您的功能已注册:

print_r( spl_autoload_functions() );

收益:

Array
(
    [0] => dataLoader
    [1] => testLoader
)

如果你初始化一个类

$class_obj = new ClassName();

dataLoader将尝试加载文件:

$folder.ClassName.php

如果他首先找不到该类,您的脚本将仅加载第二个或任何其他已注册的函数。

因此,如果在函数dataLoader __autoload中删除$ class,则不会在第一个注册函数中找到该类,因此他将尝试在第二个注册函数中查找它,依此类推。

你需要

返回true; //如果类已加载,并且您希望自动加载堆栈将被停止

返回false; //如果该类尚未加载并且您想继续执行自动加载堆栈

在你的回调中

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM