2012-11-01 60 views
3

我有以下设置。PHP严格标准:从空值创建默认对象

的index.php

require_once "common.php"; 
    ... 

的common.php

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

的config.php

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

的settings.php

$obj->dostuff = true; 
    ... 

当我打开的index.php我得到:严格的标准:从settings.php配置空值在3

创建默认的对象,如果我把里面$obj->dostuff = true;config.php它不会产生错误信息。

有人可以解释为什么我得到这个错误?我不是问如何解决它,只是明白为什么。

编辑:我的坏我对网站的每个部分2个的config.php班,我只在其中的一个离开旧改的东西包括在另一份订单,现在它后能正常工作以正确的顺序所有负载。

+0

什么内容'obj-> dostuff'? –

+0

什么是设置。PHP的第3行? – Ibu

+0

我的坏它不是函数()这是** settings.php **'$ obj-> dostuff = true;' –

回答

0

如果$ obj是意味着是一个全系统的全球访问的对象,您可以在任何地方使用Singleton模式来访问:

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; 
    } 
} 
2

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

echo get_class($obj); 

来确认,它位于产生错误的行的后面。如果它回响“StdClass”,那么情况就是这样。

您确定$ obj没有在函数/方法内创建吗?

+0

$ obj创建就像我上面所说的那样在脚本加载时运行1行 –

相关问题