<?php $str = 'hello baby!'; function say() { global $str; $str = 'hello honey!'; } say(); echo $str; //输出hello honey! ?>
$str 是一个全局变量,而这个全局变量在php程序中的函数中是不能访问的。
看上面的代码,按我的理解,global $str; say()函数在栈区中开辟空间时,say()函数中$str就像c语言的指针一样指向了函数外部的同名变量$str, 所以我们可以通过say函数内部的$str去改变全局变量的值。
php变量的生命周期中,定义在函数体外部的所谓 全局变量,函数内部是不能直接获得的。所以可以用global予以获取。看下面的代码:
<?php $str = 'hello baby!'; function say() { global $str; unset($str); } say(); echo $str; //输出 hello baby! ?>这就证明了say()函数内部的$str就是个函数外部的全局变量$str的一个别名引用,其底层就是一个c语言的指针。
那$GLOBALS呢?这是一个超全局变量(Superglobal),如$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV.。
而$GLOBALS,引用全局作用域中可用的全部变量。一个包含了全部变量的全局组合数组。变量的名字就是数组的键。即出现过的全局变量,就可以通过$GLOBALS这个数组取得。看代码:
<?php $name = 'tagore'; $age = 80; $saying = 'Wrong cannot afford defeat but rain can'; $saying1 = 'I can\'t choose the best, The best choose me!'; function show() { echo $GLOBALS['name'], ' said \'', $GLOBALS['saying1'], '\'<br />'; unset($GLOBALS['saying']); } echo '<pre>'; print_r($GLOBALS); show(); //调用show函数 print_r($GLOBALS); echo '</pre>'; ?>
输出结果:
Array$GLOBALS是由所有已定义全局变量自动形成的数组。变量名就是该数组的索引。即$GLOBALS[’saying‘]与函数外部的变量$saying是同一个变量,
所以将$GLOBALS['saying'] 删除后,该变量已不存在,所有无法输出了。
特与大家分享,如有问题,多多指教。