PHP:在函数中调用对象时未定义变量?[复制]

PHP: Undefine variable when calling an object with in a function? [duplicate]

提问人:ben 提问时间:12/17/2022 最后编辑:Sunderam Dubeyben 更新时间:2/16/2023 访问量:47

问:

我从以下代码中得到“Undefine variable”。

这是index.php中的所有代码

<?php
include "globals.classes.php";
$anObj = new Globals();
logout();

function logout() {
    echo $anObj->getName(); //Warning: Undefined variable $anObj
    exit();
}
?>

我知道在参数中传递$anObj会起作用,

但是,是否可以在不通过参数传递的情况下使其工作?

我想以这种方式调用函数..

logout();

不是这个...

注销($anObj);

PHP 警告

评论

2赞 Nigel Ren 12/17/2022
使用(除了使用类)是解决此问题的更常见和推荐的方法。所以我建议习惯它,而不是我怎么能绕过它。logout($anObj);
1赞 hakre 12/17/2022
奈杰尔任写的。还有其他方法,但它需要您阅读手册思想,然后理解。一个上下文可能是变量范围php.net/manual/en/language.variables.scope.php - 请记住,某些变量比其他变量贵得多:它们的范围越广泛,它们就越依赖于所有该范围,无论是否使用。这就是为什么Nigel 任评论的观点如此重要,它可以让你缩小范围,从而降低成本。

答:

1赞 KarlsMaranjs 12/17/2022 #1

那是因为$anObj超出了范围。您需要使 logout() 成为 的成员,并将其调用为:Globals()

<?php
include "globals.classes.php";
$anObj = new Globals();
$anObj->logout();

// In your class Global() you'll do something like this
class Globals {
   function getName() {}

   function logout() {
    echo $this->getName();
    exit();
   }
}
?>

另一种解决方案可能是这样的:

<?php
include "globals.classes.php";
$anObj = new Globals();
echo $anObj->getName();
logout()

function logout() {
    exit();
}

在这种情况下,您将不需要 .但我想你可能想做更多的事情,而不仅仅是logout()exit()