Undefined $ class_name in autoloader using spl_autoloader_register () with WAMP?

0

I'm trying to implement an autoloader for classes in my project, but I can not make this code work ... It returns the variable $ class_name as Undefined.

function autoload_classes( $class_name ) {
   if ( ! empty( $class_name ) && file_exists( $class_name ) ) {
      include get_template_directory_uri() . '/core/classes/' . $class_name . '.php';
   } else {
      return false;
   }
}
spl_autoload_extensions( '.php' );
spl_autoload_register( 'autoload_classes' );

Could you help me? Thanks!

    
asked by anonymous 17.07.2015 / 22:15

1 answer

0

Here is an autoload that I use:

function search_lib($lib, $file, $ds = '/'){
   // Verifica se o diretório informado é válido
   if (is_dir($lib)){

      // Verifica se o arquivo já existe neste primeiro diretório
      if (file_exists($lib.$ds.$file)) return $lib.$ds.$file;

      // Lista os subdiretórios e arquivos
      $dirs = array_diff(scandir($lib, 1), array('.','..'));
      foreach ($dirs as $dir) {

         // Verifica se é um arquivo se for, pula para o próximo
         if (!is_dir($lib.$ds.$dir)) continue;

         // Se for um diretório procura dentro dele
         $f = search_lib($lib.$ds.$dir, $file, $ds);

         // Caso não encontre retora false
         if ($f !== false) return $f;
      }

   }

   // Se o diretório informado não for válido ou se não tiver encontrado retorna false
   return false;
}
spl_autoload_register(
   function ($class){

      //if (strpos($class, '\') !=- -1)
      //   $class = end( explode('\', $class) );

      $libs = __DIR__.DS;
      $ext  = '.class.php';

      $file = search_lib($libs, $class.$ext);

      // Se encontrou inclui o arquivo
      if ($file !== false ) require_once $file;
      // Se não encontrar o arquivo lança um erro na tela. :)
      else {
         $msg = "Autoload fatal erro: Can't find the file {$class}{$ext} on {$libs}!";
         error_log($msg);
         exit('<br><br><strong>'.$msg.'</strong>');
      }

   }
);

It looks for the class within the directory (and its sub-directories) in the variable $libs of the anonymous function in spl_autoload_register . The extension of the class files is set in the variable $ext just below (I use .class.php , just change to its default).

Note: The code uses a constant DS which is an alias I created for DIRECTORY_SEPARATOR , if you do not use it, just change it, or if you want to set it. p>     

17.07.2015 / 22:47