我们知道,函数、类会改变当前变量的作用域。if,while等分支循环结构会继承外部作用域,即外部变量对分支循环结构内部可见。

但是C语言不支持if,while等分支循环结构内部作用域对外可见,而PHP则不然。

在PHP中,if,while等分支循环结构中声明的局部变量,在分支循环结构后面仍然有效。

比如,函数中声明的变量在函数外面是不可见的

C语言:01 #include<stdio.h>
02  
03 int foo()
04 {
05     int bar;
06     bar  = 3;
07 }
08  
09 int main()
10 {
11     printf("%d\n",bar);
12     return 0;
13 }

报错:
scope.c: In function ‘main’:
scope.c:11: 错误:‘bar’ 未声明 (在此函数内第一次使用)
scope.c:11: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
scope.c:11: 错误:所在的函数内只报告一次。)

PHP语言:1 <?php
2 function foo()
3 {
4     $bar = 1;
5 }
6  
7 echo $bar;

报错:
Notice: Undefined variable: bar in scope.php on line 7
PHP Notice:  Undefined variable: bar in scope.php on line 7

而if,while等循环分支结构会继承外部作用域,即外部变量对循环分支结构内部可见

类似的:

C语言:01 #include<stdio.h>
02  
03 int main()
04 {
05     int foo = 1;
06     if(1)
07     {
08         int bar = foo;
09         printf("%d\n",bar);
10     }
11  
12     while(1)
13     {
14         int bar = foo;
15         printf("%d\n",bar);
16         break;
17     }
18  
19     return 0;
20 }

输出:

1

1

PHP语言:01 <?php
02 $foo = 1;
03 if(1)
04 {
05     $bar = $foo;
06     echo $bar,"\n";
07 }
08  
09 while(1)
10 {
11     $bar = $foo;
12     echo $bar,"\n";
13     break;
14 }

输出:

1

1

但是不一样的地方来了。

C语言:01 #include<stdio.h>
02  
03 int main()
04 {
05     int foo = 1;
06     if(1)
07     {
08         int bar = foo;
09         printf("%d\n",bar);
10     }
11  
12     printf("%d\n",bar);
13  
14     while(1)
15     {
16         int bar = foo;
17         printf("%d\n",bar);
18         break;
19     }
20  
21     printf("%d\n",bar);
22  
23     return 0;
24 }

报错:

scope.c: In function ‘main’:
scope.c:12: 错误:‘bar’ 未声明 (在此函数内第一次使用)
scope.c:12: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
scope.c:12: 错误:所在的函数内只报告一次。)

PHP语言
01 <?php
02 $foo = 1;
03 if(1)
04 {
05     $bar = $foo;
06     echo $bar++,"\n";
07 }
08  
09 echo $bar,"\n";
10  
11 while(1)
12 {
13     $bar2 = $foo;
14     echo $bar2++,"\n";
15     break;
16 }
17  
18 echo $bar2,"\n";

输出:

1

2

1

2

这就是需要注意的地方!

if、while中变量的作用域问题的更多相关文章

  1. Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  2. C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期

    全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件.) 生命周期:程序运行期一直存在 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量. 内 ...

  3. 注意for循环中变量的作用域-乾颐堂

    1 2 for e in collections:     pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循 ...

  4. 注意for循环中变量的作用域

    for e in collections: pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循环之前已经有一个 ...

  5. JavaScript 中变量、作用域和内存问题的学习

    这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...

  6. C语言中变量的作用域和生命周期

    变量的类型: 1. 局部变量和全局变量 局部变量也称为内部变量. 局部变量是在函数内作定义说明的.其作用域仅限于函数内, 离开该函数后再 使用这种变量是非法的. 全局变量也称为外部变量,它是在函数外部 ...

  7. Delphi过程和函数中变量的作用域

    变量的作用域是指变量能被某一子程序识别的范围. 全局变量和局部变量.全局变量是指在程序的type区定义的变量,而局部变量是在过程或函数的定义部分声明的变量.全局变量在整个程序中都有意义,局部变量只在它 ...

  8. Python中变量的作用域

    一.变量作用域的含义 变量的作用域说白了就是变量的值从哪里获取,或者说变量取值的地方 我们在写代码过程中会用到很多变量,这些变量会出现在各种代码块中,有的出现在函数块里,有的在函数块外,例如: def ...

  9. C/C++中变量的作用域和存储类型简介

    写在开头 对于很多C/C++的初学者来说,很容易理不清变量的作用域和存储类型这一块的一些概念,也容易将其中的一些概念搞混淆.作为一个C/C++的初学者,笔者希望在这里能够尝试着去理一理这些较为繁杂的概 ...

随机推荐

  1. AS3帮助手册

    http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html

  2. Linux:history命令详解

      Linux下History命令 主要用于显示历史指令记录内容, 下达历史纪录中的指令 . 语法 history [n] history [-c] history [-raw] histfiles ...

  3. (转)MapReduce Design Patterns(chapter 7 (part 2))(十四)

    External Source Input Pattern Description 这种模式不从hdfs加载数据,而是从hadoop以外系统,例如RDB或web service加载. Intent 想 ...

  4. Android Studio3.0 Kotlin工程问题集

    问题1: 新建支持Kotlin的Android项目,卡在"Resolve dependency :classpath" 解决分析: 一般碰到"Resolve depend ...

  5. python中类变量,成员变量

    参考文献:http://www.jb51.net/article/54286.htm 转载.引用请附上参考文献的链接. (1)位置的区别 先看看下面这段代码: class TestClass(obje ...

  6. Linux下定时任务Crontab的使用

    使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令.例如系统管理员安排一个备份任务使其每天都运行   入门 # crontab –e 这样可以已编辑模式打开个人的cro ...

  7. typecho去index.php

    RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} ! ...

  8. CF1117D Magic Gems

    CF1117D Magic Gems 考虑 \(dp\) , \(f[i]\) 表示用 \(i\) 个单位空间的方案数,答案即为 \(f[n]\). 对于一个位置,我们可以放 \(Magic\) 的, ...

  9. Codeforces 15E Triangles 【组合计数】

    Codeforces 15E Triangles Last summer Peter was at his granny's in the country, when a wolf attacked ...

  10. maven的介绍以及使用

    maven的介绍以及使用 1.什么是maven maven是一个项目管理工具,一个依赖管理系统,maven通过项目对象模型来管理jar包(POM.xml文件) 2.maven的优点 1.maven使用 ...