php globals 优缺点,php中global和$GLOBALS 的区别

$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予以获取。看下面的代码:

$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这个数组取得。看代码:

$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'], '\'
';

unset($GLOBALS['saying']);

}

echo '

';

print_r($GLOBALS);

show(); //调用show函数

print_r($GLOBALS);

echo '

';

?>

输出结果: Array

(

[GLOBALS] => Array

*RECURSION*

[_POST] => Array

(

)

[_GET] => Array

(

)

[_COOKIE] => Array

(

)

[_FILES] => Array

(

)

[name] => tagore

[age] => 80

[saying] => Wrong cannot afford defeat but rain can

[saying1] => I can't choose the best, The best choose me!

)

tagore said 'I can't choose the best, The best choose me!'

Array

(

[GLOBALS] => Array

*RECURSION*

[_POST] => Array

(

)

[_GET] => Array

(

)

[_COOKIE] => Array

(

)

[_FILES] => Array

(

)

[name] => tagore

[age] => 80

[saying1] => I can't choose the best, The best choose me!

)

$GLOBALS是由所有已定义全局变量自动形成的数组。变量名就是该数组的索引。即$GLOBALS[’saying‘]与函数外部的变量$saying是同一个变量,

所以将$GLOBALS['saying'] 删除后,该变量已不存在,所有无法输出了。

特与大家分享,如有问题,多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值