zoukankan      html  css  js  c++  java
  • 转:PHP变量作用域(花括号、global、闭包)

    • 花括号

      很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。

      01 <?php
      02 if (True) {
      03     $a 'var a';
      04 }
      05  
      06 var_dump($a);
      07  
      08 for ($i = 0; $i < 1; $i++) {
      09     $b 'var b';
      10     for ($i = 0; $i < 1; $i++) {
      11         $c 'var c';
      12     }
      13     var_dump($c);
      14 }
      15  
      16 var_dump($b);
      17 var_dump($c);
      18 ?>

      运行结果是:

      1 string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"

      可见iffor的花括号并无构成新的作用域。

      而函数:

      1 <?php
      2 function test() {
      3     $test 'var test';
      4 }
      5  
      6 test();
      7 var_dump($test);
      8 ?>

      结果是:

      1 NULL

      global关键字

      PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。

      执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。

      global关键字无论在哪层,所引用的都是全局域的变量。

      01 <?php
      02 $test 'global test';
      03 function a() {
      04     $test 'test in a()';
      05     function b() {
      06         global $test;
      07         var_dump($test);
      08     }
      09     b();
      10 }
      11  
      12 a();
      13 ?>

      执行结果是:

      1 string(11) "global test"

      闭包

      闭包作用域跟函数类似,内层不能访问外层变量,外层不能访问内层变量。

      01 <?php
      02 function a() {
      03     $test 'test in a()';
      04     function b() {
      05         var_dump($test); // $test不能被访问
      06         $varb 'varb in b()';
      07     }
      08  
      09     b();
      10     var_dump($varb); // $varb也不能被访问
      11 }
      12  
      13 a();
      14 ?>

      执行结果:

      1 NULL NULL

      延伸阅读:

  • 相关阅读:
    修改mysql的时间/时区
    vue 3.0一些理解
    关于css中常用几种选择器的整理
    docker中MySQL8.0登录提示caching_sha2_password问题解决方法
    java请求url返回json
    weblogic11G 修改密码
    每天一个小知识
    出一套柠檬班测试开发视频(百度网盘)
    JAVA自动化,使用UIAutomator定位
    JAVA自动化,解决Appium无法输入中文问题
  • 原文地址:https://www.cnblogs.com/youxin/p/3529955.html
Copyright © 2011-2022 走看看