【发布时间】:2017-01-08 08:51:13
【问题描述】:
我希望能够包含或需要来自同一父目录(模块)的文件,只需键入我想要包含的文件的名称,而无需总是写出require_once('../app/modules/user/user.php'),所以我想出了包装它的想法全部在这样的函数中:
index.php 文件。
//index.php
function require_file($modules=array())
{
foreach($modules as $module) {
if (is_dir('../app/modules/' . $module) && file_exists('../app/modules/' . $module . '/' . $module . '.php')) {
require_once('../app/modules/' . $module . '/' . $module . '.php');
} else {
die('The module <strong>' . $module . '</strong> does not exist in the modules directory');
}
}
}
// and then require my files like this:
$modules = array();
$modules[] = 'user';
require_file($modules);
这是我的目录的样子:
1. app
- modules
- user
- user.php
2. public
- index.php
这是我的 user.php 文件:
//user.php
$user = 'My Name';
问题来了;
如果在 index.php 中使用 user.php 文件中设置的变量,仍然会抛出 注意:未定义变量:user 而不会导致 @987654326 失败@test,当它失败时,它会输出一条消息,说“模块 user 模块不存在于模块目录中”,就像它应该的那样。
当我在函数之后需要文件时,检查之前是否需要文件一次,如下所示:
index.php
function require_file($modules=array())
{
foreach($modules as $module) {
if (is_dir('../app/modules/' . $module) && file_exists('../app/modules/' . $module . '/' . $module . '.php')) {
require_once('../app/modules/' . $module . '/' . $module . '.php');
} else {
die('The module <strong>' . $module . '</strong> does not exist in the modules directory');
}
}
}
// and then require my files like this:
$modules = array();
$modules[] = 'user';
require_file($modules);
require_once('../app/modules/user/user.php');
它不起作用,因为显然它之前已经被要求过一次。
问题是......我做错了什么?
【问题讨论】:
-
所以,除了
user.php,您向我们展示了所有内容。你希望我们猜到那里有什么? -
它就在那里...带有一个设置变量 $user。
-
您可能想了解PHP Autoloading,它几乎完全符合您的要求(在类的上下文中)
标签: php