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


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

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

这是有效的。

<?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
    }
}

当试图使用类时,它会导致错误。

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

为什么我必须从$GLOBALS开始,然后把它变成一个正则变量,然后应用global。我认为$GLOBALSglobal只是语法上的不同。$GLOBALS在这里有什么不同之处?

此外,编写包含类的文件的最佳方法是什么,这样我就可以include该文件并使用该类,而无需在包含该文件后声明该类,也无需使用$GLOBALS?我的第一个代码片段是实现这一点的最佳方式吗?

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

但我看到你试图做的是创建类文件并在不包含它的情况下加载它。这就是自动加载类的概念。看看这个:http://php.net/manual/en/function.autoload.php

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