2009-08-27 66 views
0
require_once'modules/logger.php';               
$Logger = new Logger(); 

require_once 'templates/list.php'; 
$Templates = new templatesList(); 

require_once 'widgets/list.php'; 
$Widgets = new widgetsList(); 

templates/list.phpwidgets/list.php使用$Logger$Templates我用於/widgets/list.phpPHP和一些全局變量

上面的代碼引發此錯誤:

Notice: Undefined variable: Logger in .../templates/list.php on line 99 Fatal error: Call to a member function toLog() on a non-object in .../templates/list.php on line 99

UPD 下面是一行99:

$Logger->toLog($contentData); 
+0

你的線99是哪裏?你可以發佈嗎? – SilentGhost 2009-08-27 10:39:27

回答

2

如果要在對象方法中使用$Logger,則需要在該方法中將其標記爲全局。如果你不這樣做,你最終會創建一個新的本地$ Logger變量。我懷疑這是問題所在。例如:

class templatesList { 
    public function __construct() { 
     global $Logger; 
     //now we can use $logger. 
    } 
} 

但是,它很可能是更好的$記錄器傳遞到其需要使用它的每一個對象的構造函數。全局變量通常不被認爲是好的做法。

class templatesList { 
    protected $Logger; 
    public function __construct(Logger $Logger) { 
     //now we can use $logger. 

     //store reference we can use later 
     $this->Logger = $Logger; 
    } 

    public function doSomething() { 
     $this->Logger->log('something'); 
    } 
} 

new templatesList($Logger); 
+0

我試圖使用全局關鍵字,它並沒有幫助我。也許把它傳遞給構造函數將會是更好的主意......好的,謝謝。 – Ockonal 2009-08-27 10:45:45

+1

對於Logger和Templateslist類(兩者聽起來像只需要每個實例一個)我建議使用單例模型。無需傳遞變量或使用全局變量。 – 2009-08-27 11:18:01

+1

儘管單身版本的Logger可能是合適的,但單身只是一個變相的全局變量 – rojoca 2009-08-27 18:36:53

0

你確定你的/一開始的地方不是解封$記錄儀模板/ list.php的?

嘗試var_dumping()$記錄器初始化後,並在使用之前。