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

问题描述

| 我在范围上遇到了意外问题。
include
文档(也适用于
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).
}
    

解决方法

函数定义了新的作用域,因此在函数内部您不能访问全局作用域中的变量。 可变范围   在用户定义的函数中,本地   功能范围介绍。任何   函数内部使用的变量是   默认仅限于本地功能   范围 关于随附文件,该手册指出:   包含文件后,对其进行编码   包含继承变量范围   包含的行的   发生。 因此,如果您在函数中包含某些内容,则所包含文件的范围将是该函数的范围。 更新:查看您的代码示例,该代码示例已编辑成问题,函数的第一行是
global $newClass;
,它应该可以正常工作。
$newClass = new myClass();
require_once(\"path to my file\");

----- inside required file -----
function someFunction() {
     global $newClass;
     $newClass->someMethod(); 
}
请注意,尽管使用
global
会很快使您的代码难以维护。不依赖于全局范围,您可以将对象作为参数传递给函数,或使用Singleton / Registry类(有些人倾向于反对后者,但视情况而定,这可能是更干净的解决方案) 。     ,所包含的代码的范围与周围的代码没有不同。例如:
function a() {
    echo $b;
}
即使附带的文件中有“ 9”,也会失败。如果将以上内容替换为:
function a() {
    include \'file.php\';
}
...而
file.php
包含:
echo $b;
...那就像你写的一样:
function a() {
    echo $b;
}
这样想:每当您使用
include
/
require
时,包含文件的内容将替换
include
/
require
语句,就像您删除了该语句并将其内容粘贴到其位置一样。 就范围而言,它没有做任何其他事情。