2012-11-01 56 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行 –

相關問題