__ авария автозагрузки - конфликтует с Joomla

Я только что изменил весь свой код для использования __ автозагрузка, чтобы найти, что это конфликтует с joomla автопогрузчиком. Я интегрирую свое приложение с joomla в некоторых случаях для регистрации пользователей и т.д.

Я нашел, что spl_autoload_register () с, по-видимому, позволяет много автопогрузчиков.

Что мне делать?

обновление: это - то, что делает joomla

Загрузки этот файл от/library/loader.php

function __autoload($class)
{
    if(JLoader::load($class)) {
        return true;
    }
    return false;
}

Обновление 2:

Хорошо, прямо после того, как я загружаю библиотеку Joomla, я звоню

    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

    //autoloader so that it does not interfere with mine
    spl_autoload_register('__autoload');

Это - то, на что похожа моя автозагрузка:

<?php

//IMPORT
function myAutoload($class_name)
{
    $path = str_replace('_', '/', $class_name);
    include $path . '.php';
}

?>

spl_autoload_register('myAutoload',false,true);

Мой называют первым и joomla одна секунда, однако, приложение все еще не может найти классы Joomla.

Обновление 3:

После выполнения:

echo "PRE: myAutoload:" . spl_autoload_functions() . "<br />";
spl_autoload_register('myAutoload',false,true);
echo "POST: myAutoload:" . spl_autoload_functions() . "<br />";

и

    echo "PRE: JoomlaAutoLoad:" . spl_autoload_functions() . "<br />";
    //autoloader so that it does not interfere with mine
    spl_autoload_register('__autoload');
    echo "POST: JoomlaAutoLoad:" . spl_autoload_functions() . "<br />";

Мой вывод был: ПРЕД: myAutoload: POST: myAutoload:Array

ОБНОВЛЕНИЕ 4:

Я должен был изменить импорт Joomla в это:

    require_once ( JPATH_BASE .DS.'libraries'.DS.'loader.php' );
    echo "PRE: JoomlaAutoLoad:" . var_dump(spl_autoload_functions()) . "<br />";
    //autoloader so that it does not interfere with mine
    spl_autoload_register('__autoload');

            echo "POST: JoomlaAutoLoad:" . var_dump(spl_autoload_functions()) . "<br />";

    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

Вот вывод

PRE: myAutoload:
array
  0 => string 'myAutoload' (length=10)
POST: myAutoload:
array
  0 => string 'myAutoload' (length=10)
PRE: JoomlaAutoLoad:
array
  0 => string 'myAutoload' (length=10)
  1 => string '__autoload' (length=10)
POST: JoomlaAutoLoad:

Я решил это после того, как я буду включать эти файлы Joomla

    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

spl_autoload_functions () ничего не возвращает, таким образом, так или иначе joomla наполняет его.

5
задан jax 14 June 2010 в 14:30
поделиться

1 ответ

вы должны решить, какая функция автозагрузки должна иметь приоритет над другой, и использовать spl_autoload_register() соответственно (смотрите на третий аргумент). Как регистрируется функция автозагрузки Joomla?

3
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: