0

次のコードを実行すると:

// autoload classes
spl_autoload_register(function($class) {
    require_once("$class.php");
});

スクリプトと同じディレクトリに含まれるすべてのクラスで機能します。ただし、別のディレクトリにあるクラスはロードに失敗します。次の解決策が機能します。

define('ABSOLUTE_PATH', "/var/www/application");

// autoload classes
spl_autoload_register(function($class) {
    // class directories
    $dir = array(ABSOLUTE_PATH,
                 ABSOLUTE_PATH . '/models');

    foreach($dir as $path) {
        $file = sprintf('%s/%s.php', $path, $class);
        if(is_file($file)) {
            require_once($file);
        }
    }
});

しかし、これは醜い感じです。名前空間を使用できることを読みましたが、名前空間やその他のものを機能させることができないようです。ディレクトリパスをハードコーディングする必要がない、より洗練されたソリューションが存在する場合は、誰かに教えてもらえますか?

4

2 に答える 2

1

クラスを自動ロードするには、 https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.mdでPSR-0標準を使用できます。

SplClassLoaderの要点は、https: //gist.github.com/221634にあります。

于 2013-01-12T15:26:37.387 に答える
0

うん。spl_autoload_registerを使用して、複数のディレクトリからクラスを自動ロードできます。これには、名前空間を持つクラスが含まれます。:)

6行のコード、角かっこが含まれています:

spl_autoload_register(function ($class) {

   $file = str_replace('\\', '/', $class) . '.php';

   if(file_exists($file)) {

      require_once $file;

   } // end if

});

試してみて、何かお手伝いできることがあれば教えてください。

乾杯 :)

于 2018-04-06T00:32:01.073 に答える