php 全局导致非对象错误,除非从 $GLOBALS 传输

php global causing non-object error unless transfered from $GLOBALS

我有一个包含 class 的文件。当我需要访问 class 时,我将 include 这个文件。我想在 class 存在的文件中声明 class,这样我只需要声明 class 一次,并且只需要 include 文件即可使用class.

这有效。

<?php

$GLOBALS['foo_model'] = new foo_model;
$foo_model = $GLOBALS['foo_model'];
global $foo_model;

Class foo_model
{
    function foo_function() {
        // ect
    }
}

这不起作用

<?php

$foo_model = new foo_model;
global $foo_model;

Class foo_model
{
    function foo_function() {
        // ect
    }
}

尝试使用class时会导致错误。

Call to a member function foo_function() on a non-object

为什么我要从$GLOBALS开始,然后转成正则变量再应用global。我认为 $GLOBALSglobal 只是语法上的不同。 $GLOBALS 在这里有什么不同?

此外,编写包含 class 的文件的最佳方法是什么,这样我就可以 include 文件,并使用 class,而无需声明包含文件后 class,但不使用 $GLOBALS?我的第一个代码片段是完成此任务的最佳方法吗?

不要这样做,这是非常糟糕的设计。尝试使用特征。

但我看到您正在尝试做的是创建 class 文件并在不包含它的情况下加载它。这就是 autoloader class 的概念。 看看这个:http://php.net/manual/en/function.autoload.php

记住:全局变量总是有问题的,尽可能避免使用它们。