全局变量 Link to heading

PHP的全局变量和JS里面的全局变量不一样,JS里面的全局变量是那都可以访问到,PHP里的全局变量只有函数内部访问不到

<?php

$a = 1;
function main(){
  echo $a; // 错误,函数内部访问不到全局变量
}

?>

局部变量 Link to heading

只作用于函数里面

<?php

$a = 1;
function main(){
  $b = 3; 
  echo $b; // b是在函数内部定义,可以访问
}

?>

超全局变量 Link to heading

哪都可以访问 注:全局变量都储存在$GLOBALS下 通过$GLOBALS[‘变量名’]访问

局部作用域访问全局变量 Link to heading

使用$GLOBALS来访问全局变量 Link to heading

<?php

$a = 1;
function main(){
  $b = 3; 
  echo $b,$GLOBALS['a']; // 因为$GLOBALS是超全局变量,所有的全局变量都储存在$GLOBALS下面,所以可以访问
}

?>

使用global关键字 Link to heading

$a = 1;
function main(){
  global $a;
  echo $a;
  $a = 5; // 修改的还是一个变量 修改后a = 5;
}
main();
echo $a;
// 运行结果为 1 5

原理:在函数内部和外部,对同一个变量名使用一块内存地址保存数据,从而实现共同拥有

  1. 如果外部(全局)存在同名变量,直接指向外部变量的内存地址。
  2. 如果外部(全局)没有则先创建全局同名变量,再指向。