27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
我们知道,js只有全局变量和局部变量
而PHP有3个变量,分别为,超全局变量、全局变量、局部变量
1、超全局变量:可以在函数内部和函数外部访问
2、全局变量:在函数外面
3、局部变量:在函数里面,默认情况下,函数内部是不会去访问函数外部的变量
注意:常量没有作用域的概念
PHP中预定义了几个超级全局变量:
$_POST | 是一个变量,用来保存post提交的数据 |
$_GET | 是一个变量,用来保存get提交的数据 |
$_REQUEST | REQUEST可以获取以POST方法和GET方法提交的数据, 缺点:速度比较慢 。 |
$_FILES | 预定义的数组,用来获取通过 POST 方法上传文件的相关信息 |
$_ENV | 包含服务器端环境变量的数组 |
$_SERVER | 服务器和执行环境信息 |
$_SESSION | 当前脚本可用 SESSION 变量的数组 |
$GLOBALS | 是PHP的一个超级全局变量组 |
变量作用域1:函数的内部不能访问到外部的变量,这点和js不一样
<?php $num=10; function fun() { echo $num; //Notice: Undefined variable: num } fun(); //函数内部默认不能访问函数外部的值
变量作用域2:复制给超全局变量后可全局访问
<?php $_POST['num']=10; //将值付给超全局变量 function fun() { echo $_POST['num']; //获取超全局的值 10 } fun(); --------------------------------------------- <?php function fun() { $_GET['num']=10; //将值付给超全局变量 } fun(); echo $_GET['num']; //打印超全局变量的值 10
变量作用域3:在函数内部访问全局变量--使用$GLOBALS
<?php $num=10; //全局变量 function fun() { echo $GLOBALS['num']; //输出全局的$num } fun();
$GLOBALS保存的是全局变量的所有的值
<?php $a=10; $b=20; function show() { echo '<pre>'; var_dump($GLOBALS); //是一个数组,保存的是全局变量的所有的值 } show();
变量作用域4:使用global关键词使用超全局变量
<?php $num=10; function fun() { global $num; //将全局变量的$num的地址引入到函数内部 相当于$num=&GLOBALS['num'] echo $num; //10 $num=100; } fun(); echo '<br>'; echo $num; //100
global用于创建一个全局变量的引用
<?php /* define('PI',3.14); function fun() { echo PI; //3.14 } fun(); echo '<br>'; */ ------------------------------------- function fun() { define('PI',3.14); } fun(); echo PI; //3.14
静态变量一般指的是静态局部变量。
普通变量每调用一次初始化一次,调用完毕销毁,但静态变量只初始化一次。
<?php function fun() { $num=10; //普通变量每调用一次初始化一次,调用完毕销毁 $num++; echo $num,'<br>'; } fun(); //11 fun(); //11 -------------------------------- <?php function fun() { static $num=10; //静态变量只初始化一次,调用完毕吧不销毁,第二次调用的时候就不再初始化 $num++; echo $num,'<br>'; } fun(); //11 fun(); //12
1、常量和静态变量都是初始化一次
2、常量不能改变值,静态变量可以改变值
3、常量没有作用域,静态变量有作用域
<?php function fun1() { define('num',10); } function fun2() { echo num; //10 } fun1(); fun2(); ------------------------------------------------------------ <?php function fun1() { static $num=10; } function fun2() { echo $num; //Notice: Undefined variable: num 因为静态变量是有作用域的 } fun1(); fun2();
默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中
<?php $num=10; $fun=function() use($num) { //将$num引入到匿名函数中 echo $num; }; $fun(); //10
use可以引入值,也可以引入地址
<?php $num=10; $fun=function()use(&$num){ //use可以传地址 $num=100; }; $fun(); echo $num; //100
1、使用超全局变量
2、$GLOBALS
3、global关键字
4、use将函数外部变量引入到匿名函数内部
demo:
<?php $num=10; function test() { $num=20; $fun=function() use($num) { //只能引入一层 echo $num; }; $fun(); } test(); //20
本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP的作用域,超全局,全局,局部,静态,变量,常量等,如何在函数内部访问函数外部变量