spl_autoload_register和带下划线的类

时间:2019-06-02 03:32:18

标签: php autoload

我在目录中具有以下类:

database
- config
  - DB_Config.php
- ops
  - DB_Ops_User.php
  - DB_Ops_Communication.php
  - etc

我编写了一个函数来在目录中注册所有类:

private static function registerDirectories(array $directories)
{
   // If $directories is not null and not an array, it is an unexpected type.
   if(!is_array($directories)){
      if(!is_null){
         throw new InvalidArgumentException('$directories must be an array');
      }
      throw new InvalidArgumentException('$directories must be defined');
   }
   if(empty($directories)){
      throw new InvalidArgumentException('$directories must have at least one value');
   }

   $autoloadFunc = function($class) use ($directories)
   {
      foreach($directories as $directory)
      {
         $file = $class.'.php';
         if(file_exists($file))
         {
            require $file;
            return true;
         }
      }
      return false;
   };
   spl_autoload_register($autoloadFunc);
}

registerDirectories(['database/config', 'database/ops']);

但是,我总是收到未找到类DB.php的错误。我读过它试图将下划线转换为名称空间目录。您应该如何解决呢?我不想将类名中的每个下划线都放在一个目录中,以提高可读性。

0 个答案:

没有答案