从一个php包含文件传递variables到另一个:全局与不
我试图从一个包含文件传递一个variables到另一个。 这是行不通的,除非我在第二个包含文件中声明variables为全局variables。 但是,我不需要在调用第一个包含的文件中声明它是全局的。 例如:
front.inc:
$name = 'james';
index.php文件:
include('front.inc'); echo $name; include('end.inc');
输出:詹姆斯
end.inc:
echo $name;
输出:没有
如果我在end.inc中回显$ name之前声明全局$名称,那么它的工作正常。 接受的答案解释这取决于您的服务器configuration:将PHP中的variables从一个文件传递到另一个文件
我正在使用Apache服务器。 我将如何configuration它,使$名称是全球性的没有必要? 一个和另一个有什么优点/缺点?
当在PHP中包含文件时,它的行为就像包含在其中的文件中存在的代码一样。 想象一下,将每个包含文件中的代码复制并粘贴到index.php
文件中。 这就是PHP如何使用包含。
所以,在你的例子中,因为你已经在你的front.inc
文件中设置了一个名为$name
的variables,然后在你的index.php
文件中包含了front.inc
和end.inc
,你将能够echo
显variables$name
include
index.php
的front.inc
之后的任何地方。 同样,PHP处理您的index.php
,就好像您包含的两个文件中的代码是文件的一部分 。
当你在一个包含的文件中放置一个echo
,你不会得到一个结果,因为它被分开处理,然后被其他包含的文件处理。
换句话说,要做你期望的行为,你需要把它定义为一个全局的。
这是一个避免的陷阱。 如果你需要在函数中访问你的variables$ name,你需要说“global $ name;” 在该函数的开始。 您需要对同一文件中的每个function重复此操作。
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();
这就是你所要做的一切:
在front.inc中
global $name; $name = 'james';
我有一个奇怪的解决scheme。 在文件end.inc
,添加这一行:
$name=$name;
然后回声将工作。
我在我的项目中遇到了这个解决scheme,没有一个很好的解释,为什么它像这样工作。