spl_autoload не вызывает вторую функцию автозагрузки - PullRequest
0 голосов
/ 07 октября 2011

У меня вызывается 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');

Ответы [ 2 ]

1 голос
/ 07 октября 2011

нужно

вернуть true; // если класс загрузился и вы хотите, чтобы стек автозагрузки был остановлен

вернуть ложь; // если класс не загружен и вы хотите продолжить выполнение стека автозагрузки

внутри ваших обратных вызовов

надеюсь, это поможет

1 голос
/ 07 октября 2011

Ваш код работает, но, вероятно, недоразумение.

Ваши функции зарегистрированы:

print_r( spl_autoload_functions() );

возвращает:

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

и если вы инициализируете класс

$class_obj = new ClassName();

dataLoader попытается загрузить файл:

$folder.ClassName.php

Ваш скрипт загрузит вторую или любую другую зарегистрированную функцию, только если он не может найти класс в первую очередь.

Поэтому, если вы удалите свой класс $ в функции dataLoader, __autoload больше не найдет класс в первой зарегистрированной функции, поэтому он попытается найти его во второй зарегистрированной функции и т. Д.

...