Php 多个require_once in程序代码和循环迭代
有一个关于php中以下情况的问题。假设我们有3个文件,如下所示: file1.php: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"); 现在,当
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];
}