Я только что изменил весь свой код для использования __ автозагрузка, чтобы найти, что это конфликтует с 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
Я должен был изменить импорт 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 наполняет его.
вы должны решить, какая функция автозагрузки должна иметь приоритет над другой, и использовать spl_autoload_register()
соответственно (смотрите на третий аргумент). Как регистрируется функция автозагрузки Joomla?