SPL_AUTOLOAD()を使用してクラスをロードできません
-
02-10-2019 - |
質問
私は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);
...
}
}