Smarty3のautoload問題

Smarty3に移行するに当たって、プログラム内のautoload関数が使えなくなった。

オートローダー

Smarty3はspl_autoload_registerで独自のオートローダーを登録します。もしあなたのコード中に__autoload関数が存在するのなら、 それを明示的に__autoloadスタックに登録しなければなりません。 詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.php を御覧下さい。

まず、本日現在、us3.php云々のサイトにつながらないw
phpのspl_autoload_registerの項目を見ろということなんでしょうけど。

で、次のように関数を書いて「spl_autoload_register」に登録してみた。

【config.php内】
function MyAutoload($class_name){
    $filename = $class_name.".class.php";
    include_once($filename);
}
spl_autoload_register('MyAutoload');

これでOKかとおもったらまだ動かない・・・。

試行錯誤した結果、【autoloadの優先順位】というのがあることがわかった。

プログラムではconfig.php内に独自関数を宣言しているのだが、
config.phpはプログラムの一番最初に呼ばれる場所のためautoloadの最先頭に登録される。
そのため、Smartyが使用するautoload関数までたどり着かずにinclude処理されてエラーになっていたようだ。

【解決策】
で解決策は、autoload関数の設定する前にSmarty本体をincludeする。

【config.php内】
require_once "Smarty.class.php";
function MyAutoload($class_name){
    $filename = $class_name.".class.php";
    include_once($filename);
}
spl_autoload_register('MyAutoload');