关于PHP变量作用域问题

我爱逗瞿瞿 2015-02-14 01:42:25
<?php
for ($i=1;$i<2;$i++)
{
for ($j=1;$j<2;$j++)
{
$a=5;
}
$b=$a;
echo $a;
}
echo $a;
echo $b;
echo $i;

?>
输出竟然是552,太坑了,能不能解释下为什么这么设计,和C/C++差别太大了,这样岂不是很容易引起变量冲突?
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-02-14
  • 打赏
  • 举报
回复
你认为会是输出什么? for ($i=1;$i<2;$i++) //这个循环只会执行一次 { for ($j=1;$j<2;$j++) //这个循环也只执行一次 { $a=5; } $b=$a; echo $a; } echo $a; //$a 的值是循环中的最后的最后一次赋值($a=5) echo $b; //$b 的值是循环中的最后的最后一次赋值($b=$a) echo $i; //循环中止时的 $i 的值 有什么不对吗? 如果你说 和C/C++差别太大了 那么你的 C/C++ 同样没有学好!
傲雪星枫 2015-02-14
  • 打赏
  • 举报
回复
for ($i=1;$i<2;$i++)
{
for ($j=1;$j<2;$j++)
{
$a=5; // $a 赋值为5
}
$b=$a; // $b 赋值为5
echo $a; // 输出$a的值5
}
echo $a; // 输出$a的值5
echo $b; // 输出$b的值5
echo $i; // 输出$i的值,因为for($i=1; $i<2; $i++),所以$i只执行了一次$i++,所以$i=2

最后输出5 5 5 2,没什么不对。

如果是C程序,也是一样的结果。

#include <stdio.h>
#include <stdlib.h>

int main(){

int a,b,i,j;

for(i=1; i<2; i++){
for(j=1; j<2; j++){
a = 5;
}
b = a;
printf("%d\n", b);
}

printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", i);

}

断点Bingo 2015-02-14
  • 打赏
  • 举报
回复
php 声名的变量作用域没有特殊 标识符都是在当前作用域下。
一起混吧 2015-02-14
  • 打赏
  • 举报
回复
为什么我这里是输出 5552
种草德鲁伊 2015-02-14
  • 打赏
  • 举报
回复
不会,默认全部都是局部变量

21,873

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧