简单的Autoload类和包含示例

时间:2014-03-08 23:54:04

标签: php include autoload

好的,我试图让我的头脑自动加载,我有点困惑,我读了一堆帖子,现在我觉得我更困惑,如果我有一个简单的例子,我想我可以得到我的头围绕它。

让我说我有这个简单的项目:

无功/网络/ myproject的/ index.php的

然后我有var / www / myproject / classes / database.php:

class Database {
    function __construct() {
        echo 'This is my Database Class <br />';
    }
}

还有var / www / myproject / classes / functions.php:

class Functions {
      function __construct() {
          echo 'This is my functions class <br />';
      } 
}

还有var / www / myproject / classes / users.php:

class Users {
      function __construct() {
          echo 'This is my user class <br />';
      } 
}

然后假设我有2个包含在这里:

无功/网络/ myproject的/包括/ header.php文件

无功/网络/ myproject的/包括/ footer.php

那么我将如何自动加载所有这些文件和类。我想这样的事情,但我遇到的例子似乎非常特定于他们的设置或只适用于一个文件夹,或包括我没有掌握的命名空间。

我在想我的索引可能看起来像这样:

function __autoload($class_name) {
    require_once 'classes/'.$class_name . '.php';
}

但是这对于页眉和页脚的包含不起作用,所以这样的事情可能更合适

$path = array('classes/','includes/');
foreach ($path as $directory) {
    if (file_exists($directory . ? . '.php')) {
        require_once ($directory . ? . '.php');
    }

这个想法是它会包含它找到的目录中的所有内容,但我不知道该怎么做,是吗?应该代表一个通配符,我明白这不会起作用,我试图给出一个我想要做的例子。

这一定是人们经常遇到的事情,我确信有一个很好的解决方案,但是找不到能够让我理解的文章

1 个答案:

答案 0 :(得分:1)

如果您在项目名称空间中使用,我建议使用简单的代码:

 class ClassLoader {

      public  function handle($class) {
         $file = str_replace('\\', '/', $class.'.php');
         if(!file_exists($file)){
             throw new \Exception('class '.$class.' file not exists');
         }
         include_once $file;
     }

 }

 $autloader = new Classes\ClassLoader;
 spl_autoload_register(array($autloader, 'handle'));

//从现在起,您可以从类名称空间中指定的目录中加载所有类,例如

 /////////////////////////////////////////////
 // directory => framework/classes/User.php //
 /////////////////////////////////////////////

 namespace framework\classes;
 class User {
     public function helloWorld(){
             echo 'hello World';
     }
 }

 //////////////////////// 
 // and here index.php //
 ////////////////////////

 $autloader = new Classes\ClassLoader;
 spl_autoload_register(array($autloader, 'handle'));
 $user = new \framework\classes\User();
 $user->helloWorld();