Auto loading classes

Discussion in 'PHP' started by samyak, Dec 5, 2013.

  1. #1
    I tried to use the following code to load my classes automatically.
    spl_autoload_extensions(".php"); // comma-separated list
        spl_autoload_register();
    PHP:
    It works, but only those classes that are on the same directory. How do I include other classes that are on sub directory?
     
    samyak, Dec 5, 2013 IP
  2. nico_swd

    nico_swd Prominent Member

    Messages:
    4,153
    Likes Received:
    344
    Best Answers:
    18
    Trophy Points:
    375
    #2
    I prefer namespaces for autoloading.

    
    spl_autoload_register(function($namespace)
    {
        require str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . '.php';
    });
    
    PHP:
    Class definition:
    
    namespace path\to\my;
    
    class Classname
    {
    }
    
    PHP:
    (Filename path/to/my/Classname.php)

    Usage:
    
    <?php
    
    use path\to\my\Classname;
    
    // include autoloader
    
    $class = new Classname();
    
    PHP:
     
    nico_swd, Dec 5, 2013 IP
    heartnet02 likes this.
  3. NetStar

    NetStar Notable Member

    Messages:
    2,471
    Likes Received:
    541
    Best Answers:
    21
    Trophy Points:
    245
    #3
    Autoloading is different for everybody. PHP allows you to instruct the interpreter on how to load classes via a function.

    In one of my apps I have:

    
    public function __construct()
    {
       function Auto_Loader($class_name)
       {
          $required_file;
      
          switch (1) {
             case (stripos($class_name, "Controller_") !== false):
                $required_file = PATH_CONTROLLERS . $class_name . ".php";
                break;
             case (stripos($class_name, "Model_") !== false) :
                $required_file = PATH_MODELS . $class_name . ".php";
                break;
             default:
                $required_file = PATH_LIBRARY . $class_name . ".php";
                break;
          }
      
          require $required_file;
       }
      
       spl_autoload_register("MyFramework\Auto_Loader");
    }
    
    PHP:
    My routine allows auto loading for 3 different directories. My Controller, Models, and Library directories. My routine for MY application assumes your class names are also the file name. I write MY classes around this structure. For everything and anything else I set an INC Path and require those classes individually. You could however write some code to include those classes automatically too. Every app is different.
     
    NetStar, Dec 6, 2013 IP
    heartnet02 likes this.
  4. crivion

    crivion Notable Member

    Messages:
    1,669
    Likes Received:
    45
    Best Answers:
    0
    Trophy Points:
    210
    Digital Goods:
    3
    #4
    
    //FROM PHP.NET
    
    // we've writen this code where we need
    function __autoload($classname) {
        $filename = "./ADD_YOUR_DIRECTORY/". $classname .".php";
        include_once($filename);
    }
    
    // we've called a class ***
    $obj = new myClass();
    PHP:
     
    crivion, Dec 8, 2013 IP