3

我有以下设置。

索引.php

   require_once "common.php";
   ...

常见的.php

   ...
   $obj = new MyClass;
   require_once "config.php"
   ...

配置文件

   ...
   require_once "settings.php";
   ...

设置.php

   $obj->dostuff = true;
   ...

当我打开index.php时,我得到:严格标准:从 3 上的 settings.php 中的空值创建默认对象

如果我放入$obj->dostuff = true;config.php不会产生错误消息。

有人可以解释为什么我会收到此错误吗?我不是在问如何解决它,只是了解原因。

编辑:我的错误是,我为站点的每个部分都有 2 个 config.php 类,我只更改了其中一个中的一些内容,将旧的包含顺序留在了另一个中,现在它在所有按正确顺序加载后工作正常。

4

2 回答 2

2

它看起来是一个范围问题。在 settings.php 中,$obj 不可访问。PHP 正在从标准类创建新的,并给你一个警告。您可以通过输入来确认

echo get_class($obj);

在您的 settings.php 中,就在产生错误的行之后。如果它回显“StdClass”,那么就是这种情况。

您确定 $obj 不是在函数/方法中创建的吗?

于 2012-11-01T21:21:06.160 回答
0

如果 $obj 是一个系统范围的全局可访问对象,您可以使用单例模式从任何地方访问:

class MyClass
{
    protected static $_instance;

    static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}

然后,您可以在此类中创建您的方法。要获取对象本身,只需调用:

$obj = MyClass::getInstance();

此外,如果您只想调用其中一种方法但无需返回任何内容:

MyClass::getInstance()->objectMethod();

我发现这是一种组织基于单例的整体系统范围操作的非常有效的方法。

实际上,我的项目使用它从系统中的任何位置获取配置:

class syConfig
{
    protected static $_instance;

    private $_config;

    static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function load($xmlString)
    {
        $xml = simplexml_load_string($xmlString);
        $this->_config = $xml;
    }

    public function getConfig()
    {
        return $this->_config;
    }
}
于 2012-11-01T21:45:13.910 回答