我需要帮助理解这个PHP代码示例:
$bar = "outside";
function foo($bar) {
$bar = "inside";
return $bar;
}
$bar = foo($bar);
echo $bar
我预计$bar会在“外面”回音,但它回应了“内部”,我不明白为什么。$bar最初具有“外部”值(定义为全局值)。然后调用函数foo (在定义函数之后),并接受一个参数,该参数也恰好被称为$bar。$bar被赋予“外部”值,因此“外部”值被传递给foo。那么,我们有一个语句$bar = "inside",这对我来说没有意义,因为它似乎意味着“you”= "inside",那么如何将一个字符串分配给另一个字符串呢?然后函数返回$bar,我认为它应该具有“外部”的值,因为这就是传递给foo的内容。它是如何获得“内在”价值的,我搞不懂。
编辑:我的问题不是关于变量范围。我想知道的是,为什么没有将参数值传递给第3行中的函数,给出一个荒谬的语句“on”= "inside“。根据我得到的答案,我只能假设这是因为这样的语句在PHP (可能还有所有其他语言)中是非法的,所以解释器根本不这么做(尽管解释器的正常行为是替换函数体中的任何参数)。
谢谢
发布于 2011-08-08 08:23:39
您的行$bar = "inside";
正在重新分配$bar
的值。因此,无论传入哪个值,$bar
都会被分配值"inside"
。
发布于 2011-08-08 08:25:50
嗯,我不是PHP专家,但我曾经使用过其他几种语言,所以让我尝试一下:
当函数开始执行时,变量$bar是函数的本地变量(您不是在第3行引用全局$bar )。将这个局部变量设置为"inside“并返回它。然后将全局$bar设置为返回值"inside“。
如果将函数声明更改为:
function foo($bid) {
$bid = "inside";
return $bid;
}
根据您在其他问题上发表的评论,我想添加一些内容:
当您在代码中看到"$bid“时,所发生的不是变量替换,而是变量计算。在等号位于这个“计算”的右边的情况下,编译器知道“不要计算,设置”。然而,当等号在变量的左边时,它就被求值了。当变量位于等号的左侧或右侧时,编译器对函数的了解会有所不同。
发布于 2011-08-08 09:10:47
1:
$bar = "outside";
function foo($bar) {
$bar = "inside";
return $bar;
}
$bar = foo($bar);
echo $bar // **echo's inside**
2:
$bar = "outside";
function foo($bar) {
GLOBAL $bar;
$bar = "inside";
return $bar;
}
$bar = foo($bar);
echo $bar // **echo's inside**
3:
$bar = "outside";
function foo($bar) {
$bar = "inside";
GLOBAL $bar;
return $bar;
}
$bar = foo($bar);
echo $bar // **echo's outside**
https://stackoverflow.com/questions/6985165
复制相似问题