[英]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.