gpt4 book ai didi

php - 无法访问包含文件中的全局变量

转载 作者:可可西里 更新时间:2023-11-01 00:51:31 24 4
gpt4 key购买 nike

我在范围方面遇到了意想不到的问题。 include documentation (也适用于 require_once)表示所需的文件应该可以访问所需行的所有变量。

出于某种原因,我无法访问在所需的函数内使用全局范围实例化的类。

有人知道为什么吗?我显然遗漏了一些东西。

我通过引用 $GLOBALS[] 让它工作,但我仍然想知道为什么它不工作。

更新:
我得到的错误是:

Fatal error: Call to a member function isAdmin() on a non-object in <path>.php on <line>

代码:

$newClass = new myClass();

require_once("path to my file");

----- inside required file -----
function someFunction() {
$newClass->someMethod(); // gives fatal error. (see above).
}

最佳答案

函数定义了一个新的作用域,因此在函数内部您不能访问全局作用域中的变量。

Variable Scope

within user-defined functions a local function scope is introduced. Any variable used inside a function is by default limited to the local function scope

关于包含的文件,the manual states :

When a file is included, the code it contains inherits the variable scope of the line on which the include occurs.

因此,如果您在函数中包含某些内容,则包含文件的范围将是函数的范围。

更新:查看您编辑到问题中的代码示例,global $newClass; 作为该函数的第一行应该可以正常工作。

$newClass = new myClass();
require_once("path to my file");

----- inside required file -----
function someFunction() {
global $newClass;
$newClass->someMethod();
}

请注意,使用 global 会很快使您的代码更难维护。不要依赖于全局范围,您可以将对象作为参数传递给函数,或者使用 Singleton/Registry 类(有些人倾向于反对后者,但视情况而定,它可能是更简洁的解决方案)。

关于php - 无法访问包含文件中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com