php基础-5

超级全局变量

(具体内容见菜鸟教程https://www.runoob.com/php/php-superglobals.html)

  • 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

这里只讲前几个,后续章节里会有其他的

PHP $GLOBALS

  • $GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

    (GLOBALS 是一个包含了**全部变量的全局组合数组**。变量的名字就是**数组的键**,)GLOBALS就是使用数组的方法去使用

以下实例介绍了如何使用超级全局变量 $GLOBALS:

<?php 
$x = 75;
$y = 25;

function addition()
{
	$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
>>>100
  • $_POST

    $_GET

这两个变量的使用跟php表单有关,具体见链接菜鸟教程: https://www.runoob.com/php/php-forms.html

1.1 今日目标

  1. 掌握静态变量的工作原理;
  2. 了解全局变量、局部变量和超全局变量的区别;

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(); // 10

练习:如下代码输出什么

<?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 '<br>';
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 '<pre>';
	var_dump($GLOBALS);   //是一个数组,保存的是全局变量的所有的值
}
show();

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

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

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

1.2.2 静态变量(static)

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

静态变量只初始化一次

<?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);
    echo num;   //10
}
function fun2() {
	echo num;   //10
}
fun1();  // 10
fun2();  // 10
------------------------------------------------------------
<?php
function fun1() {
	static $num=10;
    echo $num;   //10
}
function fun2() {
	echo $num;  
}
fun1();
fun2(); // Notice: Undefined variable: num 因为静态变量是有作用域的

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(); // 20
}
test();    //20

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

<?php
$num=10;
$fun=function()use(&$num)
{   
    //use可以传地址
	$num=100;
};
$fun();
echo $num;  //100
原文地址:https://www.cnblogs.com/IronMind/p/13264789.html