Return to Snippet

Revision: 25176
at March 22, 2010 20:41 by AmyStephen


Updated Code
<?php
class TamkaAutoload
{

  function loadApplicationClasses () {

  /*** nullify existing autoloads ***/
  spl_autoload_register (null, false);

  /*** specify extensions that may be loaded ***/
  spl_autoload_extensions('.php');

  function TamkaLoader ($class)
  {                           
   /*** retrieve namespaces and folders from configuration ***/
   $serverConfig = new TamkaServer;                    
   $namespaceArray = explode(",", $serverConfig->autoloadNamespaces);

   $autoloadFolderArray = explode(",", $serverConfig->autoloadFolders);                               

   /*** process each configuration name space ***/
   for ($na = 0; $na < count($namespaceArray); $na++) {

    /*** remove name space value from class to find filename ***/
    $classFilename = TamkaAutoLoad::extractFileName ($class, $namespaceArray[$na]);

    if ($classFilename == false) {
      /*** namespace not used for class prefix ***/
    } else {
      /*** namespace matches ***/

      for ($fa = 0; $fa < count($autoloadFolderArray); $fa++) {
      /*** namespace not used for class prefix ***/
        $folderFile = TamkaAutoload::replaceSlashwithDirectorySeparator(TAMKA_BASE.trim($autoloadFolderArray[$fa]).DS.$classFilename);

        /*** require_once file, if exists, and exist ***/
        $results = TamkaAutoLoad::requireFilename ($folderFile);                                         

        if ($results == true) {
         $fa = count($autoloadFolderArray) + 1;
         $na = count($namespaceArray) + 1;
        }
       } 
      }
     }
    }

  /*** register the new loader function ***/
  spl_autoload_register('TamkaLoader');               

  /*** RELOAD the Joomla! Autoload ***/
  spl_autoload_register('__autoload');                            
  }       

  function extractFileName ($class, $namespace) 
  {
    if (substr($class, 0, strlen($namespace)) == $namespace) {
      return trim(substr($class, strlen($namespace), (strlen($class) - strlen($namespace)))).'.php';
    } else {
      return false;
    }
  }

  function replaceSlashwithDirectorySeparator ($filename) 
  {  
    return str_replace (chr(47), DS, $filename );      
  }                        
  function requireFilename ($file) 
  {  
    if (file_exists($file)) {
      require_once $file;
      return true;
    } else {
      return false;
    }
  }    
}

Revision: 25175
at March 22, 2010 20:37 by AmyStephen


Initial Code
<?php
class TamkaAutoload
{

  function loadApplicationClasses () {

  /*** nullify existing autoloads ***/
  spl_autoload_register (null, false);

  /*** specify extensions that may be loaded ***/
  spl_autoload_extensions('.php');

  function TamkaLoader ($class)
  {                           
   /*** retrieve namespaces and folders from configuration ***/
   $serverConfig = new TamkaServer;                    
   $namespaceArray = explode(",", $serverConfig->autoloadNamespaces);

   $autoloadFolderArray = explode(",", $serverConfig->autoloadFolders);                               

   /*** process each configuration name space ***/
   for ($na = 0; $na < count($namespaceArray); $na++) {

    /*** remove name space value from class to find filename ***/
    $classFilename = TamkaAutoLoad::extractFileName ($class, $namespaceArray[$na]);

    if ($classFilename == false) {
      /*** namespace not used for class prefix ***/
    } else {
      /*** namespace matches ***/

      for ($fa = 0; $fa < count($autoloadFolderArray); $fa++) {
      /*** namespace not used for class prefix ***/
        $folderFile = TamkaAutoload::replaceSlashwithDirectorySeparator(TAMKA_BASE.trim($autoloadFolderArray[$fa]).DS.$classFilename);

        /*** require_once file, if exists, and exist ***/
        $results = TamkaAutoLoad::requireFilename ($folderFile);                                         

        if ($results == true) {
         $fa < count($folderArray) + 1;
         $na = count($namespaceArray) + 1;
        }
       } 
      }
     }
    }

  /*** register the new loader function ***/
  spl_autoload_register('TamkaLoader');               

  /*** RELOAD the Joomla! Autoload ***/
  spl_autoload_register('__autoload');                            
  }       

  function extractFileName ($class, $namespace) 
  {
    if (substr($class, 0, strlen($namespace)) == $namespace) {
      return trim(substr($class, strlen($namespace), (strlen($class) - strlen($namespace)))).'.php';
    } else {
      return false;
    }
  }

  function replaceSlashwithDirectorySeparator ($filename) 
  {  
    return str_replace (chr(47), DS, $filename );      
  }                        
  function requireFilename ($file) 
  {  
    if (file_exists($file)) {
      require_once $file;
      return true;
    } else {
      return false;
    }
  }    
}

Initial URL
http://www.alltogetherasawhole.org/profiles/blogs/joomla-autoloader-using

Initial Description
Autoload for PHP that enables the definition of namespaces and folders in a list that is used in the spl_registered function for any number of unknown values. This specific function can be used with Joomla! 1.5 since it reload's Joomla!'s autoload class at conclusion.

Initial Title
PHP Autoloader with spl_autoload

Initial Tags


Initial Language
PHP