将变量从一个 php 包含文件传递到另一个 php 包含文件:全局与非

2022-08-30 08:13:24

我正在尝试将变量从一个包含文件传递到另一个包含文件。除非我在第二个包含文件中将变量声明为全局,否则这不起作用。但是,我不需要在调用第一个包含的文件中将其声明为全局。例如:


front.inc:

$name = 'james';

索引.php:

include('front.inc');
echo $name;
include('end.inc');

输出:詹姆斯


end.inc:

echo $name;

输出:无


如果我在end.inc中回显$name之前声明全局$name,那么它可以正常工作。这篇文章的接受答案解释说,这取决于你的服务器配置:将PHP中的变量从一个文件传递到另一个文件。

我使用的是Apache服务器。如何配置它,以便不需要将$name声明为全局?一个与另一个相比是否有优点/缺点?


答案 1

父文件有权访问两个包含文件中的变量

在 PHP 中包含文件时,它的行为就像代码存在于包含它们的文件中一样。想象一下,将每个包含文件中的代码直接复制并粘贴到.这就是 PHP 使用包含的方式。index.php

因此,在您的示例中,由于您已经设置了一个在文件中调用的变量,然后同时包含在您的 中,因此您将能够在 .同样,PHP 会处理您的,就好像您包含的两个文件中的代码是该文件的一部分一样$namefront.incfront.incend.incindex.phpecho$nameincludefront.incindex.phpindex.php

包含的文件无权访问其他包含的文件

当您将包含的文件放在未在自身中定义的变量时,您不会得到结果,因为它与任何其他包含的文件分开处理。echo

换句话说,要执行您期望的行为,您需要将其定义为全局。


答案 2

这是一个需要避免的陷阱。如果您需要访问函数中的变量$name,则需要在该函数的开头说“全局$name;”。您需要对同一文件中的每个函数重复此操作。

include('front.inc');
global $name;

function foo() {
  echo $name;
}

function bar() {
  echo $name;
}

foo();
bar();

只会显示错误。正确的方法是:

include('front.inc');

function foo() {
  global $name;
  echo $name;
}

function bar() {
  global $name;
  echo $name;
}

foo();
bar();

推荐