2016-01-13 86 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

相关问题