PHP-作用域

1.2 作用域
1.2.1 变量作用域

1、全局变量:在函数外面

2、局部变量:在函数里面,默认情况下,函数内部是不会去访问函数外部的变量

3、超全局变量:可以在函数内部和函数外部访问

在这里插入图片描述

<?php
$num=10;
function fun() {
echo $num; //Notice: Undefined variable: num
}
fun();
//函数内部默认不能访问函数外部的值
---------------------
<?php
$_POST['num']=10; //将值付给超全局变量
function fun() {
echo $_POST['num']; //获取超全局的值 10
}
fun();
----------------------------
<?php
function fun() {
$_GET['num']=10; //将值付给超全局变量
}
fun();
echo $_GET['num']; //打印超全局变量的值 10

在函数内部访问全局变量

<?php
$num=10; //全局变量
function fun() {
echo $GLOBALS['num']; //输出全局的$num
}
fun();

练习:如下代码输出什么

<?php
function fun() {
$GLOBALS['num']=10; //将值付给全局的$num
}
fun();
echo $num; //10

global关键字

<?php
$num=10;
function fun() {
global $num; //将全局变量的$num的地址引入到函数内部 相当于$num=&GLOBALS['num'] echo $num; //10
$num=100;
}
fun();
echo '
';
echo $num; //100
-----------------------------------
<?php
$num=10;
function fun() {
global $num;
unset($num); //销毁的是引用,不是具体的值
}
fun();
echo $num; //10

小结:

1、$GLOBALS保存的是全局变量的所有的值

<?php
$a=10;
$b=20;
function show() {
echo '';
var_dump($GLOBALS); //是一个数组,保存的是全局变量的所有的值
}
show();

2、global用于创建一个全局变量的引用

注意:常量没有作用域的概念

<?php
/*
define('PI',3.14);
function fun() {
echo PI; //3.14
}
fun();
echo '
';
*/
-------------------------------------
function fun() {
define('PI',3.14);
}
fun();
echo PI; //3.14

1.2.2 静态变量(static)

静态变量一般指的是静态局部变量。

静态变量只初始化一次

<?php
function fun() {
$num=10; //普通变量每调用一次初始化一次,调用完毕销毁
$num++;
echo $num,'
';
}
fun(); //11
fun(); //11
--------------------------------
<?php
function fun() {
static $num=10; //静态变量只初始化一次,调用完毕吧不销毁,第二次调用的时候就不再初始化
$num++;
echo $num,'
';
}
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();

1.2.3 匿名函数use()

默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中

<?php
$num=10;
$fun=function() use($num) { //将$num引入到匿名函数中
echo $num;
};
$fun(); //10

思考:如何在函数内部访问函数外部变量

1、使用超全局变量

2、$GLOBALS

3、global

4、use将函数外部变量引入到匿名函数内部

练习:如果代码输出什么

<?php
$num=10;
function test() {
$num=20;
$fun=function() use($num) { //只能引入一层
echo $num;
};
$fun();
}
test(); //20

多学一招:use可以引入值,也可以引入地址

<?php
$num=10;
$fun=function()use(&$num){ //use可以传地址
$num=100;
};
$fun();
echo $num; //100


作者:cwl_java

相关推荐

Quasar Input:type=number 去掉上下小箭头 实现加减按钮样式功能

es6函数中的作用域实例分析

numpy库reshape用法详解

pycharm安装及如何导入numpy

pycharm安装及如何导入numpy