我们知道,函数、类会改变当前变量的作用域。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

这就是需要注意的地方!

最新文章

  1. Provider:SSL Provider,error:0-等待的操作过时
  2. 黄聪:wordpress/wp-includes目录文件
  3. javascript数学计算
  4. C语言基础--结构体对齐,位域,联合体
  5. .NET分布式事务处理总结【下】 - 包含MSMQ的分布式事务处理
  6. ajax get/post
  7. ztree树形插件
  8. 十分钟搞懂什么是CGI(转)
  9. OCP-1Z0-051-名称解析-文章12称号
  10. c语言的预处理指令分3种   1&gt; 宏定义   2&gt; 条件编译   3&gt; 文件包含
  11. kali下安装截图软件
  12. Markdown使用小总结[不定时更新]
  13. python基础一 ------如何获取多个字典相同的键
  14. angularjs学习第四天笔记(第一篇:简单的表单验证)
  15. ingress rewrite
  16. STL_map.修改删除
  17. HDU 4738 Caocao&#39;s Bridges (2013杭州网络赛1001题,连通图,求桥)
  18. TCP处理主要开销
  19. java invoke(转摘)
  20. 20145216《java程序设计》课程总结

热门文章

  1. 天气预报api整理
  2. NorFlash、NandFlash、eMMC比较区别
  3. SDP协议简述
  4. (转)MapReduce Design Patterns(chapter 6 (part 2))(十二)
  5. [Shell]bash的良好编码实践
  6. CUDA Samples: Long Vector Add
  7. C# Thrift 实战开发 从PLC到Thrift再到客户端集成开发
  8. Linux libusb 安装及简单使用
  9. 基本SQL命令
  10. Jmeter图形结果