Heim >Backend-Entwicklung >PHP-Tutorial >PHP 中global 跟$GLOBALS[]的使用和区别

PHP 中global 跟$GLOBALS[]的使用和区别

WBOY
WBOYOriginal
2016-06-13 12:08:48916Durchsuche

PHP 中global 和$GLOBALS[]的使用和区别

变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。例如:

?

<?php$a = 1;include 'b.inc';?>

?

?

这里变量 $a 将会在包含文件 b.inc 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:

?

<?php$a = 1; /* global scope */function Test(){    echo $a; /* reference to local scope variable */}Test();?>

?

?

这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能不小心就改变了一个全局变量。PHP 中全局变量在函数中使用时必须声明为 global。

?

global 关键字

?

首先,一个使用 global 的例子:

Example #1 使用 global

?

<?php$a = 1;$b = 2;function Sum(){    global $a, $b;    $b = $a + $b;}Sum();echo $b;?>

?

?

以上脚本的输出将是“3”。在函数中声明了全局变量 $a 和 $b 之后,对任一变量的所有引用都会指向其全局版本。对于一个函数能够声明的全局变量的最大个数,PHP 没有限制。

在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:

Example #2 使用 $GLOBALS 替代 global

?

<?php$a = 1;$b = 2;function Sum(){    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];}Sum();echo $b;//3?>

?

?

$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:

Example #3 演示超全局变量和作用域的例子

?

<?phpfunction test_global(){    // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。    global $HTTP_POST_VARS;    echo $HTTP_POST_VARS['name'];    // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。    echo $_POST['name'];}?>

?

?

?global和$GLOBALS[]区别

?

$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针

?

<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>

?结果:Notice: Undefined variable: var1 。因为变量var1被unset函数删除了。

?

 <?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; ?> 

?结果:打印 1

删除的只是别名引用,其本身的值没有受到任何的改变。

global $var其实就是&$GLOBALS['var'],调用外部变量的一个别名而已。?

上面代码中的$var1和$GLOBALS['var1']是指的同一变量的本身。

?

PHP的global变量的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。?

?

结论:

1.$GLOBALS['var']是外部的全局变量本身?

2.global $var是外部$var的同名引用或者指针

?

?

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn