程序代码和循环迭代中的多个require_once

时间:2014-06-12 12:58:58

标签: php

在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时,它可以工作......

为什么?数组不会被记住或再次包含,但功能测试确实......

(请注意,我试图用简单的代码制作一个简单的例子,只是为了给出这个想法)

谢谢

3 个答案:

答案 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];
}