echo "Point1, a=".$a."\n";
echo "Point1, b=".$b."\n";
if(1<2)
{
$a = 6;
$b['link'] = "here";
echo "Point2, a=".$a."\n";
echo "Point2, b[link]=".$b['link']."\n";
}
echo "Point3, a=".$a."\n";
echo "Point3, b[link]=".$b['link']."\n";
为什么以上代码打印出以下内容?
Point1, a=
Point1, b=
Point2, a=6
Point2, b[link]=here
Point3, a=6
Point3, b[link]=here
根据我的理解,$ a和$ b的范围应该在花括号{}!
中结束答案 0 :(得分:11)
根据我的理解,$ a和$ b的范围应该在花括号{}!
中结束
只有函数和方法有自己的局部范围。其他控制结构(循环,条件......)没有。
答案 1 :(得分:1)
第一个$ a和$ b实际上会抛出一个警告,未定义的索引,因为它们在输出之前尚未声明。
答案 2 :(得分:1)
在PHP中,只有函数引入了一个新的范围,与Java和其他语言不同:((( 因此,如果您需要新的范围,则需要创建一个新函数并调用它。
$a = 1;
call_user_func(function(){
//new local scope
$a = 99999;
});
echo $a; //will print 1
答案 3 :(得分:0)
范围是您可以访问变量(或属性或方法)的边界。您的代码不是范围的示例,它是语法分析。在双引号内,php将识别并尝试评估变量。因为$ b [..]是你引用数组元素的方式,所以php会尝试解析它。
大括号用于多种用途。在代码的上下文中,如果你的if(...)条件,它们会分隔开头和结尾,如
if (condition)
{
// do all
// of this stuff
// between the { and }
// if the condition
// is true
}
这与范围无关,除非你想看看它是“如果条件为真,这就是要执行的代码的开始和结束”,但如上所述,那不是“范围”真的手段。
您还可以使用{..}告诉php从何处开始和结束变量名称,以避免歧义。例如:
在这个例子中,php会尝试将变量解析为$ abar,因为这是一个有效的变量名:
$a = "foo";
$b = "$abar"
echo $b; // output : nothing - $abar doesn't exist (will give you a notice)
由于您希望它解析$ a而不是$ abar,您可以使用{..}来指定变量名称的开头和结尾:
$a = "foo";
$b = "${a}bar"
echo $b; // output : foobar