我的php代码中有一个文件需要。这个要求在代码中存在两次。
require 'test.php';
echo $result;
require 'test.php';
在完全相同的文件上运行第二个需求之前,有没有办法清除第一个需要设置的所有变量?
答案 0 :(得分:1)
如果您在需求开头声明所有变量,请执行以下操作:
$var = false;
$var2 = 0;
$var3 = '';
// etc...
除了再次要求文件之外,您不必做任何其他事情 - 这些声明会自动将变量重置为初始状态。
话虽这么说,你要做的就是呼吁采用不同的方法。根据您需要使用它的方式将该功能封装到函数或类中。基本上,如果你有一些代码在整个代码库中重复,你应该对它进行模块化,并且绝对不会仅使用该内部功能所需的变量来污染全局范围。
答案 1 :(得分:1)
如果不使用全局变量,可以将require
包装在函数中。在这种情况下,您创建的所有变量都将限制在函数范围内。
function includeFile() {
require 'test.php';
echo $result;
}
includeFile();
includeFile();
但是按照评论中的建议创建一个类会好得多。
答案 2 :(得分:0)
你可以做两件事。 unset()
将删除所有这些变量。这回答了你的问题。
你应该做的是研究OOP和课程。创建一个类,然后创建该类的实例。然后,您可以创建一个新类,并拥有完全不同的值和数据,最终再次禁用unset()
和require
。
答案 3 :(得分:0)
我没有测试此代码!
Point是包含之前定义的变量列表,包含文件,包含后获取已定义变量的列表,计算差异,根据该差异取消设置全局变量,包含文件。
请参阅get_defined_vars
和unset
上的手动条目。
<?php
$old_vars = get_defined_vars();
require 'test.php';
$new_vars = get_defined_vars();
echo $result;
$diff_vars = array_diff_key($old_vars, $new_vars);
while ($var = key($diff_vars)) {
unset($GLOBALS[$var]);
next($diff_vars);
}
unset($old_vars, $new_vars, $diff_vars);
require 'test.php';
有道理吗?