PHP中会话变量和全局变量的区别是什么?

16

PHP 中的会话变量和全局变量有什么区别?


尝试学习http://php.net/manual/en/index.php网站,那里有完整的PHP手册。 - user1423506
请在此处提出具体的编程问题。请阅读http://stackoverflow.com/faq。 - Rikesh
全局变量何时被销毁? - Srividhya
5个回答

32

全局变量是可以从应用程序的任何位置访问的变量,因为它们具有全局作用域

会话变量也可以从应用程序的任何位置访问,但它们对不同的用户不同,因为它们取决于会话。当特定用户会话结束时,它们就会失效。


这是一个简单的答案,并且点子很好。 - hodl
1
会话变量在会话结束时失效。但是对于全局变量,它何时会失效? - Srividhya
2
全局变量会在停止应用服务器时死亡,或者在被强制终止时死亡。 - Smita
1
全局变量是在不同用户之间共享的吗? - Veer Shrivastav
2
全局变量并不适用于整个应用程序:它们不会跨不同页面持久存在(与不在会话中的任何其他变量一样,在每个页面更改时都会被销毁)。此外,它们也不会在用户之间共享。 - T30
我认为这同样适用于 .Net。 - Bedir

4

global 是一个关键字,用于访问在顶层作用域中声明的变量,并且在当前作用域中不可用。这与会话无关:它不会在页面之间持久存在。

$a = "test";
function useGlobalVar(){
    echo $a;   // prints nothing, $a is not availabe in this scope
    global $a;
    echo $a;   // prints "test"
}

$GLOBALS 是另一种访问顶层作用域变量的方法,而不必使用 global 关键字:

$a = "test";
function useGlobalVar(){
    echo $GLOBAL['a'];   // prints "test"
}

有些人会混淆globalsuperglobals的概念:Superglobals(比如 $GLOBALS、$_REQUEST、$_SERVER)在任何范围内都可以使用,无需进行全局声明。需要注意的是,它们不会跨页面持久化(唯一例外的是 $_SESSION)。 $_SESSION 是一个持久化存在于不同页面间的 Superglobal 数组。

1
这篇文章中有很好的解释。 - T30

1

全局变量是在任何函数或类范围之外声明并在另一个函数中使用的变量,使用 global 关键字,例如:

$a = 123; // this is a global variable
function foo()
{
    global $a; // and this is the explicit declaration
}

超级全局变量类似于普通全局变量,不同之处在于它们在函数内部被隐式声明为全局变量,因此始终可用。

最后,会话变量可以通过超级全局变量$_SESSION访问,并通过发送和接受会话标识符来传递。


1

全局变量是指可以在所有PHP文件中访问的变量,PHP定义了一些全局变量,可供所有PHP脚本使用。例如 - $_POST,$_SESSION,$_REQUEST。

"global"也是一个关键字,用于访问在函数外定义的变量。

  <?php
  $name = "xyz" ;
  function hello(){
  global $name ;
  echo $name ;
  }

  ?>

你在第一句话中提到了超级全局变量。 - T30

1

会话变量是存储在服务器端的变量,对于给定的客户端连接保持不变。

全局变量是具有通用(全局...)作用域的变量。这些变量不一定依赖于给定的客户端连接。

有关会话,请参见: http://www.php.net/manual/en/book.session.php

有关全局变量,请参见: http://www.tutorialspoint.com/php/php_global_variables.htm

最后,这种类型的问题并不适合在本论坛提问,请参见: https://stackoverflow.com/faq#dontask

“您应该只提出基于实际问题的实用性可回答的问题。闲聊、开放式的问题会降低我们网站的实用性,并将其他问题挤出首页。

您的问题应该有合理的范围。如果您可以想象一本完整回答您的问题的书,那么您就要求太多了。

如果您问问题的动机是“我想参与关于______的讨论”,那么您不应该在这里提问。但是,如果您的动机是“我希望其他人向我解释______”,那么您可能可以。 (当然,我们的实时网络聊天室欢迎讨论。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接