Php 多个require_once in程序代码和循环迭代

Php 多个require_once in程序代码和循环迭代,php,Php,有一个关于php中以下情况的问题。假设我们有3个文件,如下所示: file1.php: for ($a=0; $a<=10; $a++) { require_once("file2.php"); $b = test($a); echo $b . "\n"; } file3.php: $array_a = array("1" => "A", "2" => "B", "3" => "C", "4" => "D", "0" => "E"); 现在,当

有一个关于php中以下情况的问题。假设我们有3个文件,如下所示:

file1.php:

for ($a=0; $a<=10; $a++) {
  require_once("file2.php");
  $b = test($a);
  echo $b . "\n";
}
file3.php:

$array_a = array("1" => "A", "2" => "B", "3" => "C", "4" => "D", "0" => "E");
现在,当我在php cli命令行上运行file1.php时:

发生的事情是,它只会回显E,然后出错。这意味着file3.php只包含在循环迭代中。在第二次循环迭代中,它出错了

每次迭代都需要函数test()一次,但在第二次迭代中不需要数组。当我在test3.php文件上使用include时,它可以工作

为什么呢?数组不会被记住或再次包含,但函数测试会

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


谢谢

您在第二个函数中缺少带有
require\u 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];
}
require_once(“file2.php”);
对于($a=0;$a仅在文档上:


在你的第二个文件中,你在一个函数中使用了一次
require\u
。因此它在该函数的范围内。为了在第二、第三次等迭代中使用
$array\u a
,你需要将
$array\u a
定义为全局文件。因此,像这样创建你的第二个文件应该可以:

function test($val) {
    global $array_a;
    require_once("file3.php"); //does not work
    //include("file3.php"); // works
    return $array_a[$val];
}

您遗漏了双引号:
require\u once(“file3.php”)
您好,是的,对不起,这是我文章中的一个输入错误。我使用引号。将更新我上面的代码。是的,正确,但在第二次循环迭代中,它将抛出php错误,因为数组a似乎消失了或其他什么……是的,我考虑过了,它的工作方式与您上面描述的一样,但我想知道为什么它在我给出的示例中不起作用。它确实需要一次数组,但在第二次循环迭代中它会抛出错误。是的,这解决了问题。谢谢。虽然对我来说仍然有点困惑,为什么它需要是全局的…我认为它需要只在该函数中可用,而不需要是全局的…因为它应该在该函数中的每次迭代中都需要一次函数…原因是因为require_是否一次包含文件取决于文件的物理路径,所以在第二、第三次迭代中,它认为它已经包含了,但范围仍然适用。我刚才找到的更详细的答案是吗?有趣的是,“global$array_a”语句是做什么的?它根本不是一个声明性语句。它实际上在“$GLOBALS”数组中创建了一个条目。该条目是在运行File3.php时填写的。如果没有这里的“global”语句,“array_a”将在函数范围中定义,并在函数退出时被销毁。php 5.3.18谢谢。是的,这触及了我的问题的核心。仍然需要思考几分钟:)看起来有点棘手,至少在我看来:)@Ryan Vincent。是当不使用全局语句时,示例将只输出一次E。当在数组_a上使用全局语句时,示例将输出E a B C D
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.
function test($val) {
    global $array_a;
    require_once("file3.php"); //does not work
    //include("file3.php"); // works
    return $array_a[$val];
}