1

私はこのようなプロジェクトを持っています:

事業

ここで、フォルダークラスとサブフォルダー内のすべてのphpファイルを自動ロードしたいと思います。

私はこれでそれを行うことができます:

$dirs = array(
   CMS_ROOT.'/classes',
   CMS_ROOT.'/classes/layout',
   CMS_ROOT.'/classes/layout/pages'
);
foreach( $array as $dir) {
  foreach ( glob( $dir."/*.php" ) as $filename ) {
    require_once $filename;
  }
}

しかし、私はこれが好きではありません。例えば。

「layout/pages/a.php」は「layout/pages/b.php」を拡張します

a.phpが最初にロードされたため、エラーが発生します。プロジェクトファイルをどのようにロードしますか?クラス?

解決済み:)

これが私のコードです:

spl_autoload_register('autoloader');
function autoloader($className) {
    $className = str_replace('cms_', '', $className);
    $className = str_replace('_', '/', $className);

    $file = CLASSES.'/'.$className.'.php';
    if( file_exists( $file ) ) {
    require_once $file;
    }
}
4

1 に答える 1

1

これを試してみてください

<?php

spl_autoload_register('your_autoloader');

function your_autoloader($classname) {
    static $dirs = array(
      CMS_ROOT.'/classes',
      CMS_ROOT.'/classes/layout',
      CMS_ROOT.'/classes/layout/pages'
   );
   foreach ($dirs as $dir) {
      if (file_exists($dir . '/'. $classname. '.php')) {
          include_once $dir . '/' . $classname . '.php';
      }
   }
}

登録your_autoloaderするとspl_autoload_register()、次のようなクラスにアクセスするたびに、php インタープリターによって呼び出されます。

  • require_once()またはがまだロードされていないinclude_once()

  • PHP 内部の一部ではありません

于 2012-12-18T20:21:33.843 に答える