質問

私はSPL Autoloadの機能をいっぱいにしていますが、現在機能させることができないので、重要な何かを見逃しているようです。これが私が現在使用しているスニペットです:

// 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]:クラス要求は/home/someuser/public_html/subdomains/test/contact.phpで5行目にロードできませんでした

request.class.phpはです 絶対に /home/someuser/public_html/subdomains/test/include/classes/directoryで。

何が足りないの?

役に立ちましたか?

解決

コメント(匿名)があります http://www.php.net/manual/en/function.spl-autoload-register.php#96804 それはあなたの問題に当てはまるかもしれません:spl_autoload_register()はcamelcaseでうまく再生されないようで、あなたの場合はリクエストの代わりにrequest.class.phpを見つけようとしている可能性があります...

他のヒント

クラスがあるはずのパスは、あなたがそれらを期待していたパスに一致しないように思われる。比較

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

/home/someuser/public_html/subdomains/test/

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

同様のエラーメッセージがありましたが、私の問題は異なっていました。私のエラーメッセージのように見えました

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

削除するのを忘れてしまいました Lib\ から Lib\Regex 正規表現クラスの定義自体の内部。私は次のようなものを持っていました:

namespace Lib;

class Regex {

...

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

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

      ...
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top