繁体   English   中英

简单的自动加载类并包含示例

[英]Simple Autoload class and include example

好吧,我试图绕过自动加载,我有点困惑,我读了很多文章,现在我觉得我更困惑,如果我有一个简单的例子,我想我可以解决这个问题。

所以说我有一个简单的项目:

无功/网络/ 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');
    }

想法是它将包含它找到的目录中的所有内容,但我不确定如何执行该操作? 本来应该代表一个通配符,我明白这不会起作用,我想举一个例子说明我想做什么。

这一定是人们经常遇到的事情,我肯定有一个好的解决方案,只是找不到一篇足以解释它的文章让我理解

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

 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM