8

私は SPL オートロード機能をいじっていますが、現在それを機能させることができないため、何か重要なものが欠けているようです。現在使用しているスニペットは次のとおりです。

// ROOT_DIRECTORY translates to /home/someuser/public_html/subdomains/test
define('ROOT_DIRECTORY', realpath(dirname(__FILE__)));
define('INCLUDE_DIRECTORY', ROOT_DIRECTORY . '/includes/classes/');
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY);
spl_autoload_extensions('.class.php, .interface.php, .abstract.php');
spl_autoload_register();

echo get_include_path()私が期待したパスを取得したとき:

// Output echo get_include_path();
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

ただし、コードを実行すると、次のエラー メッセージが表示されます。

致命的なエラー: spl_autoload() [function.spl-autoload]: 5 行目の /home/someuser/public_html/subdomains/test/contact.php にクラス リクエストを読み込めませんでした

Request.class.php は間違いなく/home/someuser/public_html/subdomains/test/includes/classes/ ディレクトリにあります。

私は何が欠けていますか?

4

3 に答える 3

20

あなたの問題に当てはまるかもしれないhttp://www.php.net/manual/en/function.spl-autoload-register.php#96804にコメント (匿名) があります:キャメルケースを使用し、あなたの場合、Request の代わりに request.class.php を見つけようとしている可能性があります...

于 2010-07-06T16:07:07.820 に答える
0

クラスがあるはずのパスが、期待していたパスと一致しないようです。比較

.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

/home/someuser/public_html/subdomains/test/

includes/classes/違いは、 SPL が必要とするクラスではなく、上のいくつかのディレクトリにあることです。

于 2010-07-06T14:57:15.343 に答える
0

同様のエラー メッセージが表示されましたが、私の問題は異なっていました。私のエラーメッセージは次のようになりました

PHP Fatal error:  spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49

Regex クラス定義自体の内部Lib\から fromを削除するのを忘れていたことが判明しました。Lib\Regex私は次のようなものを持っていました:

namespace Lib;

class Regex {

...

   public static function match($pattern, $str) {

      $regex = new Lib\Regex($pattern);

      ...
   }
}
于 2015-01-28T05:46:09.337 に答える