web-dev-qa-db-ja.com

PHPの複数のディレクトリにspl_autoload_registerを使用する方法は?

私は実際に自分用に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 ;
    }
});

それはうまく機能していますが、すべてをシンプルにする別の方法があると確信しています。誰も私にこのコードをどのように改善またはシンプルにすることができますか?この状況で教祖は何を使用していますか?

18

以下のコードが役立ちます。ただし、ネームスペースを確認することをお勧めします。

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;
        } 
    } 
});
8
user3563950