2011-08-08 18 views
1

PHPでクラスを自動読み込みしようとしています。ただし、__autoload()関数は実行されていないようです。変数$class_nameを入力してもechoを試しても、私が下に示した出力以外は表示されません。私はすべての関連するファイルを含めて、それの無関係な部分を取り除いた。 PHP: Autoloading Classes - Manualの注記によると、使用していないCLI interactive modeには__autoload()を使用できません。任意のポインタは非常に高く評価されます。ありがとう。 index.phpのの__autoloadがPHPで実行されていません

出力:

致命的なエラー:クラス 'カレンダー' の行に/home1/tylercro/public_html/cb-test/index.php

には見られません

のindex.php:

<?php 
    require_once($_SERVER['INCLUDES'] . 'prep.php'); 
    $smarty -> assign('calendar', new Calendar()); 
?> 

prep.php:

<?php 
    error_reporting(-1); 

    function __autoload($class_name) { 
     include($_SERVER['CLASSES'] . $class_name . '.php'); 
    } 
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php'); 

    $smarty = new Smarty(); 
?> 

.htaccessファイル:

Options -Indexes 

SetEnv CLASSES /home1/tylercro/public_html/cb-test/includes/classes/ 
SetEnv INCLUDES /home1/tylercro/public_html/cb-test/includes/ 
SetEnv SMARTY_BIN /home1/tylercro/smarty/ 
+0

常に '.htaccess'を使用せずにアプリケーションを構築しよう - それは意志あなたがnginxのに移動するのに役立ちます。 –

+0

このサイトが積極的に開発されているので、ファイルがたくさん移動します。潜在的に必要とされるメンテナンスの可能性がほとんどない(あるいは何らかの理由で)同じ動作をどのように実装することができるかについての代替の推奨事項はありますか? –

+0

確かに、どこかで宣言された "魔法の" $ _SERVER定数を使って自動ロードを行うべきではありません。名前空間とクラス名の使用については、この[標準](http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1)を参照してください。オートローディング。 –

答えて

4

このpostは私の問題を解決しました。私がしなければならなかったすべては、以下にprep.phpを変更した:

<?php 
    error_reporting(-1); 

    function __autoload($class_name) { 
     include($_SERVER['CLASSES'] . $class_name . '.php'); 
    } 
    define('SMARTY_SPL_AUTOLOAD',1); 
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php'); 
    spl_autoload_register('__autoload'); 

    $smarty = new Smarty(); 
?> 
+0

define( 'SMARTY_SPL_AUTOLOAD'、0);それは私のために行います - Smarty-3.1.2 – silviud

4

Smartyのは、独自の自動ロード機能を持っており、それはあなたと衝突します。 spl_autoload_register()は、オートローダーとしての機能を登録できるため、問題を解決できます。

+0

私は困惑させたドキュメンテーションを見ました。私はあまりにも関数を使用する方法がわからないのですか? 'spl_autoload()'とは何ですか? –

+0

私は 'my_autoload()'に名前を変更した後に私の '__autoload()'関数を登録しましたが、Smartyのオートロード機能でオートロードされると思われるいくつかのSmartyファイルについて警告が表示されます。ところで、 '__autoload()'を再宣言して警告やエラーを出すべきではありませんか?なぜ私は以前にそのエラーを取得していませんでしたか? –

+0

私はそれがカレンダークラスを自動ロードしたことに言及すると便利だと思います。 –

関連する問題