• 花括号

    很多语言都以花括号作为作用域界限,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"

    可见if和for的花括号并无构成新的作用域。

    而函数:

    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

    延伸阅读:

转:PHP变量作用域(花括号、global、闭包)的更多相关文章

  1. JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识

    在这篇文章中,我会试图讲解JavaScript变量的作用域和声明提升,以及许多隐隐藏的陷阱.为了确保我们不会碰到不可预见的问题,我们必须真正理解这些概念. 基本定义 作用范围是个“木桶”,里面装着变量 ...

  2. PHP变量作用域(花括号、global、闭包)

    花括号 很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域. <?php if (True) { $a = 'var a'; } var_dump($a); for ($ ...

  3. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  4. python 变量作用域、闭包

    先看一个问题: 下面代码输出的结果是0,换句话说,这个fucn2虽然已经用global声明了variable1,但还是没有改变变量的值 def func1(): variable1=0 def fun ...

  5. swtich和case语句中,定义变量要加花括号

    转自: http://blog.chinaunix.net/uid-27103408-id-3340702.html http://www.xuebuyuan.com/2070170.html swi ...

  6. Python基础:11变量作用域和闭包

    一:变量作用域 变量可以是局部域或者全局域.定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域. 全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数, ...

  7. python 装饰器(二):装饰器基础(二)变量作用域规则,闭包,nonlocal声明

    变量作用域规则 在示例 7-4 中,我们定义并测试了一个函数,它读取两个变量的值:一个是局部变量 a,是函数的参数:另一个是变量 b,这个函数没有定义它. >>> def f1(a) ...

  8. Python-变量、变量作用域、垃圾回收机制原理-global nonlocal

    变量实现原理决定了Python使用的垃圾回收机制为变量引用计数,当这个对象引用计数为0时候,则会自动执行__del__函数回收资源, del方法只是把变量指向的对象引用计数减一而已并删除这个变量 表达 ...

  9. 【转】javascript变量作用域、匿名函数及闭包

    下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...

随机推荐

  1. OR扩展

    <pre name="code" class="sql">SQL> select substr(xx.acct_no,1,5) agent_o ...

  2. cf492A Vanya and Cubes

    A. Vanya and Cubes time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  3. 借助Net-Speeder对服务器进行优化

          对于丢包情况较为严重的VPS,我们可以采用一些优化TCP协议的软件对服务器进行相应的优化操作,我在以前的文章中介绍过一款名叫锐速的软件,它可以很好的解决丢包问题,但是这个软件对于服务器内核 ...

  4. ipython with ubuntu

    在Linux环境下,其实IDE环境配置比较容易配.所以建议用linux做开发. 首选启动终端:Ctrl+Alt+T sudo apt-get update sudo apt-get install p ...

  5. WP系统推广难的原因之中的一个之我见

    个人也觉得如今的Android市场几家独大,竞争太激烈.利润空间挤压太严重,有实力的厂家不如尝试剑走偏锋,在其它大佬都还没跟进的时候,把市场投向WP.先入为主,不失为良策! 话说Microsoft不开 ...

  6. hadoop集群监控工具ambari安装

    Apache Ambari是对Hadoop进行监控.管理和生命周期管理的基于网页的开源项目.它也是一个为Hortonworks数据平台选择管理组建的项目.Ambari支持管理的服务有: Apache ...

  7. python (3):wxPython打包app,报错

    1,打包app报错 如图: 使用py2app,mac下打包成app.异常.程序直接退出. 没有详细的错误信息,client程序直接崩溃了. 2.原因 代码没有几行: #!/usr/bin/python ...

  8. 从反编译的角度去观察C#6.0

    1. 自动属性初始化 (Initializers for auto-properties) 1.1 C#6.0 之前的写法 public class FirstExperience { private ...

  9. 设置c#windows服务描述及允许服务与桌面交互的几种方法(转)

    方法一: 在ProjectInstaller.cs重写 install() ,Uninstall()方法 public override void Install(IDictionary stateS ...

  10. Android--------- SD卡存储文件报错解决

    ##文件找不到 1.没有写write权限 2.没有判断文件夹是否存在,不存在则创建