__autoload を使用するようにすべてのコードを変更して、それが joomla オートローダーと競合することを確認しました。場合によっては、アプリを joomla と統合してユーザーを登録します。
明らかに多くのオートローダーを許可する spl_autoload_register() を見つけました。
私は何をすべきか?
更新:これはjoomlaが行うことです
/library/loader.php からこのファイルを読み込みます
function __autoload($class)
{
if(JLoader::load($class)) {
return true;
}
return false;
}
更新 2:
OK、呼び出した 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);
私が最初に呼び出され、1 秒後に 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 />";
私の出力は次のとおりです。 PRE: 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 が詰め込んでいます。