zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    .Net开发中IIS启动后,网站不能访问。0x80004005 无法执行程序。所执行的命令为 .....问题
    .Net开发中项目无法引用/项目引用失败/引用文件出现黄色警告图标,并生成失败的问题
    Mac系统安装Docker
    小程序开发----微信小程序实现下拉刷新功能
    小程序开发----微信小程序navigate跳转没反应
    小程序开发----小程序点击复制文本内容到剪贴板
    小程序开发----微信小程序直接写&nbsp;设置空格无效
    python字符串的反转
    python2项目迁移到python3
    robotframework废弃的关键词以及替代的关键词(关键词找不到,可能已经过期了)
  • 原文地址:https://www.cnblogs.com/IronMind/p/13264789.html
Copyright © 2011-2022 走看看