1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* 作用域 作用域:变量(常量)能够被访问的区域 1、变量可以在普通代码中定义 2、变量也可以在函数内部定义 在PHP中作用域严格来说分为两种:但是PHP内部还定义一些在严格意义之外的一种,所以总共算三种: 1、全局变量:就是用户普通定义的变量(函数外部定义) 所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可访问 脚本周期:直到脚本运行结束(最后一行代码执行完〉 2、局部变量:就是在函数内部定义的变量 所属当前函数空间:在PHP中只允许在当前函数自己内部使用 函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行) 3、超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等) 所属超全局空间:没有访问限制(函数内外都可以访问) */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
*/ //默认的代码空间:全局空间 //最终会被系统纳入到超全局变量中:$GLOBALS['global'] = 'global area'; $global = 'global area'; //局部变量(函数内部定义) function display(){ //所有的形参都可以理解为局部变量 $inner = __FUNCTION__; //访问全局变量 //echo $global; //当前不存在访问报错 //访问全局变量 var_dump($GLOBALS); //访问超全局变量 echo $GLOBALS['global']; //使用超全局变量下标访问 //输出局部变量 echo $inner; } //访问函数 display(); echo '<br/>'; //输出局部变量 echo $inner; //当前访问会报错,因为函数调用完成之后会释放,所以局部变量不存在。 //如果想函数内部使用外部变量:除了 $GLOBALS 之外,通过参数传值(如果要统一战线还可以使用引用传值) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* 在 PHP 中其实还有一种方式,能够实现全局访问局部,同时局部也可以全局访问:global 关键字 global 关键字:是一种在函数里面定义变量的一种方式 1、如果使用 global 定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量) 2、如果使用 global 定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同命的全局变量 本质的形式:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。 基本语法: global 变量名; //不能直接赋值 变量名 = 值; //修改赋值 */ |
1 2 3 4 5 6 7 8 9 10 |
function display1(){ //global 关键字定义全局变量 global $local; $local = 'inner'; } display1(); echo $local; |
1 2 3 4 5 |
/* 总结: 虽然以上方式可以实现局部与全局的互访,但是通常不会这么做。一般如果会存在特殊使用也会使用参数的形式来访问。(还可以使用常量:define 定义的) */ |