Php 函数中所需的文件中设置的变量仍然会导致;注意:未定义变量";警告
我希望能够包含或需要来自同一父目录(模块)的文件,只需键入要包含的文件的名称,而不必总是写出Php 函数中所需的文件中设置的变量仍然会导致;注意:未定义变量";警告,php,Php,我希望能够包含或需要来自同一父目录(模块)的文件,只需键入要包含的文件的名称,而不必总是写出require\u一次('../app/modules/user/user.php'),因此我想出了一个主意,将其全部封装在函数中,如下所示: index.php文件 //index.php function require_file($modules=array()) { foreach($modules as $
require\u一次('../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);
这是我的user.php文件:
//user.php
$user = 'My Name';
问题就在这里
is\u dir或文件\u exists
测试,当失败时,它会输出一个骰子消息,说明“模块用户在模块目录中不存在”就像它应该的那样 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');
函数需要_文件($modules=array())
{
foreach($modules作为$module){
如果(is_dir('../app/modules/'.$module)&&file_存在('../app/modules/'.$module./'.$module.'.php')){
需要_一次('../app/modules/'.$module./'.$module..php');
}否则{
die('module'.$module.在modules目录中不存在');
}
}
}
//然后像这样要求我的文件:
$modules=array();
$modules[]=“用户”;
需要_文件($modules);
需要_once('../app/modules/user/user.php');
它不起作用,因为显然它以前已经被要求过一次了
问题是…我做错了什么 变量
$user
在require\u文件
功能范围中定义。这是引起注意的原因
您需要在user.php
文件中将$user
声明为global变量:
//user.php
全球$用户;
$user='My Name';
不过这不是个好主意。您应该将模块创建为类。如果您忘记了本模块中的变量
$user
,而在另一个模块中声明了另一个$user
变量,则会产生干扰。因此,您向我们展示了除user.php
之外的所有内容。你想让我们猜猜是什么?它就在那里…有一个设置变量$user。你可能想了解一下哪些基本上就是你所需要的(在类的上下文中)项目不是面向对象的…我还在学习php。你能告诉我怎么做吗?答案是经过编辑的。如果您不需要加载类,自动加载程序将不起作用。@GermanLashevich这些文件可以很容易地编辑成类,从长远来看这将是最好的选择。OP正在学习PHP这是学习OOP的最好时机,而不是在学习过程之后。。。它避免了不良习惯,如全球@Martin你是对的。但有两个方面:解决当前任务和学习最佳实践。当前问题的背景还不够清楚,无法说明如何准确地重写代码以使用类。在探索了如何使用类的选项之后,我发现没有太多的东西值得去做,所有这些都是对最佳实践的某种破坏。闭包可能是一种方法,但会将各种新变量添加到函数中,文件内容需要使用eval等。
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');