从一个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.incend.inc ,你将能够echo显variables$name include index.phpfront.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,没有一个很好的解释,为什么它像这样工作。