2016-01-13 161 views
-2
include "sys.php"; 

$logger = new logger(); 
$logger->write("Hello!"); 

這是有效的。但是,PHP函數內部調用類方法時發生錯誤

include "sys.php"; 

$logger = new logger(); 

function test() { 
    $logger->write("Hello!"); 
} 

test(); 

這不。服務器崩潰,錯誤500.

爲什麼?

+1

因爲你不知道'function scope'是什麼。 –

+0

我不明白。我正在運行相同的代碼,只是在一個函數內部。它應該工作。 – Gala

+0

方法'test()'在範圍中沒有'$ logger',只有作爲參數傳遞的變量,局部變量和全局變量可見 – Benjy1996

回答

0

$logger沒有定義在函數內部:因爲它是外部測試函數創建

include "sys.php"; 

function test() { 
    $logger = new logger(); 
    $logger->write("Hello!"); 
} 

test(); 
0

$記錄器不處於測試功能範圍可用。 你可以這樣聲明

global $logger; 
    $logger = new logger(); 
    function test() { 
     global $logger; 
     $logger->write("Hello!"); 
    } 
    test(); 
+1

與全局有什麼關係? 「邪惡」。 –

+0

$ GLOBALS ['logger'] = new logger(); 這,出於某種原因,對我來說似乎是錯誤的... – Gala

+0

這可能有效,但它比不完全理解範圍更糟糕。濫用「全局」關鍵字並完全忽略了對象編程的重點。 – worldofjr

相關問題