• 花括号

    很多语言都以花括号作为作用域界限,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. linux磁盘限额配置:quota命令

    LINUX下也有类似WINDOWS NTFS所用的磁盘限额,用的是quota来实现通过rpm -q quota确定是否已安装用quota只能对patation做限额,要做到针对某个目录来做只能靠ln ...

  2. 【转】预装(push)lib64中so文件查找错误

    原文网址:http://blog.csdn.net/caroline_wendy/article/details/43615361 Android系统已经升级为64位系统,在进行预装(adb push ...

  3. bzoj 1196

    http://www.lydsy.com/JudgeOnline/problem.php?id=1196 二分+并查集 一共有2*M条路径,我们首先将这2*M条路径按费用排序. 然后二分最大费用的公路 ...

  4. 简单计算器(Android)

    aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKC

  5. JS监听组合按键

    有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...

  6. c语言typedef运用与函数指针

    #include <stdio.h> #include <stdlib.h> #define PINT int * typedef short* PSHORT; //typed ...

  7. php字符串常用处理函数(数组的拆分、查找替换)

    //字符串常用函数    $a = "hello";    echo strlen($a); //输出字符串的长度        $b = "Hello";   ...

  8. [iOS] Baritem 添加一项

    不是拖拽,而是在设计栏的属性设置里面.

  9. [iOS] 创建第一个应用程序项目

    开发环境:MacBook Pro XCode 5.0.1 1. 创建新的空的工程 2. 手动添加Controller 3. 将Controller添加到AppDelegate 4. 编辑.xib 5. ...

  10. [WebStrom] Cannot detect file change to trigger webpack re-compile

    Working with editors/IDEs supporting “safe write” Note that many editors support “safe write” featur ...