2

语言是 Apache 2.2 服务器上的 PHP 5.4。这是一个由ajax调用的脚本。

$usr = new User();

function getMyName(){
    echo $usr->username;
}
getMyName();

由于某种原因 $name 超出范围。为什么会这样?我也尝试直接调用脚本,结果相同。我尝试使用 use($name) 来解决,但这显然只适用于匿名函数(闭包)?

当我这样做时,它可以工作,但很荒谬:

$usr = new User();
$name = $usr->username;

function getMyName($n){
    echo $n;
}
getMyName($name);
4

2 回答 2

4
$usr = new User();

function getMyName(){
    global $usr;
    echo $usr->username;
}
getMyName();

或者:

$usr = new User();

function getMyName($usr){
    echo $usr->username;
}
getMyName($usr);
于 2012-08-29T11:00:38.053 回答
1

这并不荒谬。这就是变量作用域应该如何工作的。您需要将 $usr 变量作为函数参数传递,否则它将超出范围。函数旨在接收输入并发送回结果/输出。你应该坚持你的第二个例子,而不是搞乱全局......

$usr = new User();
$name = $usr->username;

function getMyName($n){
    echo $n;
}
getMyName($name);

这是维基百科的引述:

在计算机科学中,子例程,也称为过程、函数、例程、方法或子程序,是执行特定任务的较大计算机程序中源代码的一部分,并且相对独立于其余代码。

于 2012-08-29T11:05:27.067 回答