好的,我试图让我的头脑自动加载,我有点困惑,我读了一堆帖子,现在我觉得我更困惑,如果我有一个简单的例子,我想我可以得到我的头围绕它。
让我说我有这个简单的项目:
无功/网络/ 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');
}
这个想法是它会包含它找到的目录中的所有内容,但我不知道该怎么做,是吗?应该代表一个通配符,我明白这不会起作用,我试图给出一个我想要做的例子。
这一定是人们经常遇到的事情,我确信有一个很好的解决方案,但是找不到能够让我理解的文章
答案 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();