在php中有关于以下情况的问题。假设我们有3个文件如下:
file1.php:
for ($a=0; $a<=10; $a++) {
require_once("file2.php");
$b = test($a);
echo $b . "\n";
}
file2.php:
function test($val) {
require_once("file3.php"); //does not work
//include("file3.php"); // works
return $array_a[$val];
}
file3.php:
$array_a = array("1" => "A", "2" => "B", "3" => "C", "4" => "D", "0" => "E");
现在我在php cli命令行上运行file1.php:
发生的事情是它只会回显E,之后会出错。这意味着file3.php仅包含在循环迭代中。并且在第二次循环迭代中它出错了。
每次迭代都需要函数test(),而不是第二次迭代中的array_a。当我在test3.php文件中使用include时,它可以工作......
为什么?数组不会被记住或再次包含,但功能测试确实......
(请注意,我试图用简单的代码制作一个简单的例子,只是为了给出这个想法)
谢谢
答案 0 :(得分:0)
您在第二个功能上缺少require_once
的引号。你也可以在循环之前要求文件一次,而不是多次包含它。
require_once("file2.php");
for ($a=0; $a<=10; $a++) {
$b = test($a);
echo $b . "\n";
}
require_once("file3.php");
function test($val) {
//include(file3.php); // works
return $array_a[$val];
}
注意:include不起作用,它只是不生成错误,因为它只是一个包含。
答案 1 :(得分:0)
仅限于文档require_once:
The require_once statement is identical to require except PHP will check if the
file has already been included, and if so, not include (require) it again.
答案 2 :(得分:0)
在您的第二个文件中,您在函数内使用require_once
。所以它属于该功能的范围。为了在第二,第三等迭代中使用$array_a
,您需要将$array_a
定义为全局。因此,制作这样的第二个文件应该有效:
function test($val) {
global $array_a;
require_once("file3.php"); //does not work
//include("file3.php"); // works
return $array_a[$val];
}