私は実際に自分用にMVCフレームワークを作成しようとしていますが、オートロードに問題があります。実際には問題ではありませんが、達人にspl_autoload_register
異なるディレクトリがある場合の機能。
次のディレクトリがあるとしましょう:
Controllers
Libs
Models
各フォルダーには、次のような異なるクラスが含まれます。
Controllers:
Main.php
File.php
About.php
Libs:
Main.php
Front_controller.php
Models:
Index.php
File.php
Login.php
異なるディレクトリに同じ名前のファイル名が見つかる場合があることに気づくでしょう。さて、これは私がこれまで試したものです:
spl_autoload_register(function ($class) {
$pathContorllers = 'Controllers/' . $class . '.php';
$pathLibs = 'Libs/' . $class . '.php';
$pathModels = 'Models/' . $class . '.php';
if (file_exists($pathContorllers)) {
require_once $pathContorllers;
} elseif (file_exists($pathLibs)) {
require_once $pathLibs;
} elseif (file_exists($pathModels )) {
require_once $pathModels ;
}
});
それはうまく機能していますが、すべてをシンプルにする別の方法があると確信しています。誰も私にこのコードをどのように改善またはシンプルにすることができますか?この状況で教祖は何を使用していますか?
以下のコードが役立ちます。ただし、ネームスペースを確認することをお勧めします。
spl_autoload_register ( function ($class) {
$sources = array("Controllers/$class.php", "Lib/$class.php ", "Models/$class.php " );
foreach ($sources as $source) {
if (file_exists($source)) {
require_once $source;
}
}
});