PHP函数内不用global关键字能否访问全局变量(对比Python作用域)
PHP不使用global关键字能否访问全局变量
完全可以。global从来不是PHP访问全局变量的唯一方式,它的本质只是做引用导入:把全局作用域的变量绑定到当前函数的局部符号表里,让你能直接用$变量名的简写形式读写。如果不用global,直接用PHP内置的$GLOBALS超全局数组就能在任何作用域直接读写全局变量,不需要任何额外声明。
原示例的可运行改造
你给出的代码不需要加global $a,改成下面的写法就能正常输出内容:
<?php $a = "helllo welcome to php! ....:)"; function msg(){ // 直接通过超全局数组读取全局域的$a,无需任何声明 echo $GLOBALS['a']; } msg(); ?>
直接运行这段代码不会报未定义变量的错误,会正常输出$a存储的字符串。
和Python作用域规则的区别
两种语言的作用域查找逻辑本身就不一样:
- Python读取变量时会按「局部作用域→外层闭包作用域→全局作用域→内置作用域」的顺序逐层查找,所以函数里直接读全局变量不需要任何声明;只有当你需要在函数内部给全局变量重新赋值的时候,才需要用
global关键字提前声明。 - PHP函数的局部符号表默认和全局完全隔离,不会自动向外查找变量:要么用
global把需要的全局变量导入局部符号表,要么直接用全作用域可见的$GLOBALS数组访问全局变量。
效果参考


Python无需global即可读取全局变量的运行效果:
内容的提问来源于stack exchange,提问作者Shubham-Misal
相关产品推荐
相关产品推荐

