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');