3

Web を調べた後、機能する SPL_Autoload を構築し、その中で名前空間を使用することができました。それは機能しますが、私が見ていたすべての例とドキュメントと比較すると、少し奇妙に見えます。すべてを正しく理解して使用していますか?

$class は subdir\timer と呼ばれるクラスを検索し、見つからないため SPL_autoload に移動します

$class = new subdir\timer;

SPL_autoload は、.php または .class.php (SPL_extensions のおかげで) のいずれかで終わるファイル「timer」を持つフォルダー「subdir」内のファイルを探すと想定されています。

現在、レジスタと SPL_autoload で何が起こっているのかよくわかりません。単独で登録しようとしたとき、_extensions を使用していませんでしたが、spl_autoload を追加すると正常に動作しました。唯一のことは、どの例でもこのように設定されているのを見たことがないので、この部分に本当に疑問があります

spl_autoload_extensions(".php,.class.php");
spl_autoload_register(function($class){
    spl_autoload("$class");
});

改善できる点や私が間違っていたことはありますか?

4

1 に答える 1

3

私はそれをテストしましたが、私にとってはうまくいきます:

set_include_path(__DIR__.'PATH_TO_LIB');
spl_autoload_extensions('.php,.class.php');
spl_autoload_register();

正しい include_path を設定しましたか?

さらに、名前空間とクラス名については、PSR-0 と呼ばれる標準があります。

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

SplClassLoaderもありますが、これは少し大きいですがより柔軟ですが、ファイル拡張子を 1 つしか設定できないのが不思議です。しかし、検索するPSR-0 autoloaderと、より多くの実装が見つかります。ちなみに、知っておく価値のある規格PSR-1PSR-2もあります。

于 2013-07-20T22:45:15.853 に答える