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将函数外部变量引入到匿名函数内部
原文地址:https://www.cnblogs.com/SharkJiao/p/13962318.html