将变量从一个php包含文件传递到另一个:global与not

max*_*son 69 php variables scope global include

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


front.inc:

$name = 'james';
Run Code Online (Sandbox Code Playgroud)

index.php文件:

include('front.inc');
echo $name;
include('end.inc');
Run Code Online (Sandbox Code Playgroud)

输出:詹姆斯


end.inc:

echo $name;
Run Code Online (Sandbox Code Playgroud)

输出:没什么


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

我正在使用Apache服务器.我如何配置它以便声明$ name是全局的?一个与另一个有优点/缺点吗?

Mic*_*yen 57

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

所以,在你的榜样,因为你已经设置了一个名为变量$name在你的front.inc文件,然后既包括front.incend.inc你的index.php,你就可以echo$name后的任何地方includefront.inc你内index.php.再次,PHP会处理您,index.php就像您包含的两个文件中的代码是文件的一部分一样.

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

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

  • 你的回答似乎自相矛盾.你说过几次,包括一个文件就像所有代码只是一个文件的一部分一样.因此,我在帖子中描述的内容相当于:$ name ='james'; echo $ name; echo $ name; - 这应该产生jamesjames.但是你的倒数第二段与我刚才描述的相矛盾.也许你的意思是只有进行包含调用的文件才能访问包含文件的变量,因此其他包含的文件无法访问这些变量.那是对的吗? (46认同)
  • 是的,这听起来是对的.对不起,如果我说的话令人困惑.我编辑了5次,因为我很难描述这个过程而不会让你迷失.因此,父文件可以访问两个包含文件中的变量,但是包含的文件无法访问其他包含的文件.如果那有意义的话. (23认同)
  • 投票否决,因为前两段明确与以下句子相矛盾。 (4认同)

Kağ*_*yal 30

这是一个需要避免的陷阱.如果您需要在函数中访问变量$ name,则需要说"global $ name;" 在该功能的开头.您需要为同一文件中的每个函数重复此操作.

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

function foo() {
  echo $name;
}

function bar() {
  echo $name;
}

foo();
bar();
Run Code Online (Sandbox Code Playgroud)

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

include('front.inc');

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

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

foo();
bar();
Run Code Online (Sandbox Code Playgroud)