• PHP基础之作用域


    作用域

    变量作用域

    概念

    • 变量作用域
      • 全局变量:在函数外面
      • 局部变量:在函数里面,默认情况下,函数内部是不会去访问函数外部的变量
      • 超全局变量:可以在函数内部和函数外部访问
    <?php
        # 将值付给超全局变量
        $_POST['num']=10;   
        function fun1() {
            echo $_POST['num'];   
        }
        fun1();
        echo "<br>";
        # 将值付给超全局变量
        function fun2() {
            $_GET['num']=20;  
        }
        fun2();
        echo $_GET['num'];  
    ?>
    

    在函数内部访问全局变量

    <?php
        $word= '泥萌';  
        function fun1() {
            echo $GLOBALS['word'];	
        }
        fun1();
        echo "<br>";
        function fun2(){
            $GLOBALS['word']= '蜗萌';
        }
        fun2();
        echo $word;
    ?>
    

    global关键字

    • global关键字
      • $GLOBALS保存的是全局变量的所有的值
      • global用于创建一个全局变量的引用
    <?php
        # 将全局变量的$word的地址引入到函数内部 
        $word= '泥萌';  
        function fun1() {
            global $word;	
            // $word= $GLOBALS['word'];
            echo "fun1:{$word}<br>";
            $word= '蜗萌';
        }
        fun1();
        echo "全局:{$word}";
        echo "<hr>";
        # 销毁的是引用,不是具体的值
        function fun2(){
            global $word;	
            echo "fun2:{$word}<br>";
            unset($word);
            echo "fun2销毁后:{$word}<br>";
        }
        fun2();
        echo "全局:{$word}";
    ?>
    
    <?php
        # 是一个数组,保存的是全局变量的所有的值
        $sunny= '泥萌';  
        $jerry= '蜗萌';
        $tomy= '塔萌';
        function show() {
            echo '<pre>';
            var_dump($GLOBALS);
        }
        show();
    ?>
    

    常量没有作用域的概念

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

    静态变量(static)

    • 静态变量
      • 静态变量一般指的是静态局部变量。
      • 静态变量只初始化一次
    <?php
        # 普通变量每调用一次初始化一次,调用完毕销毁
        function fun1(){
            $num= 10;	
            $num++;
            echo $num,'<br>';
        }
        fun1();
        fun1();
        echo "<hr>";
        # 静态变量只初始化一次,调用完毕吧不销毁,第二次调用的时候就不再初始化
        function fun2(){
            static $num= 10;	
            $num++;
            echo $num,'<br>';
        }
        fun2();
        fun2();
    ?>
    
    • 常量和静态变量的区别
      • 常量和静态变量都是初始化一次
      • 常量不能改变值,静态变量可以改变值
      • 常量没有作用域,静态变量有作用域

    匿名函数use()

    • 匿名函数
      • 默认情况下,函数内部不能访问函数外部的变量
      • 但在匿名函数中,可以通过use将外部变量引入匿名函数中
      • use()只能引入一层函数
      • use()可以传地址
    <?php
      # 将$num引入到匿名函数中
      $num=10;
      $fun=function() use($num) {  
        echo $num;	
      };
      $fun();   //10
    ?>
    
    <?php
        # 只能引入一层
        $num=10;
        function test() {
            $num=20;
            $fun=function() use($num) { 
                echo $num;
            };
            $fun();
        }
        test(); 
    ?>
    
    <?php
        # use()可以传地址
        $num= 10;
        $fun=function() use(&$num){   
            $num= 100;
        };
        $fun();
        echo $num;  //100
    ?>
    

    小结

    • 在函数内部访问函数外部变量的方法
      • 使用超全局变量
      • $GLOBALS
      • global
      • use将函数外部变量引入到匿名函数内部
  • 相关阅读:
    linux内核中听过就能记住的概念
    专治不会看源码的毛病--spring源码解析AOP篇
    接口性能优化方案及其理论依据
    Redis各种数据结构性能数据对比和性能优化实践
    iOS 防止UIButton重复点击
    iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包
    Git简单使用
    软考和软件设计师
    libstdc++适配Xcode10与iOS12
    Objective-C Block与函数指针比较
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13962318.html
Copyright © 2020-2023  润新知