2011-03-21 61 views
1

有没有与命名空间PHP 5.3的命名空间 - 功能无法正常运行

<?php 
namespace MyApp; 
class Fruit {} 
class Apple extends Fruit {} 

$apple = new Apple(); 
$name = 'Apple'; 

var_dump (is_subclass_of($apple, 'Fruit')); 
var_dump (is_a($apple, 'Apple')); 
var_dump (new $name); 

正常工作,我怎样才能使两者PHP 5.3和PHP < 5.3没有命名空间支持这个兼容某些功能? is_subclass_of和is_a不能像这样工作!

+3

什么不按预期方式工作? – Unicron 2011-03-21 21:01:27

回答

7
<?php 
namespace MyApp; 
class Fruit {} 
class Apple extends Fruit {} 

$apple = new Apple(); 
$name = 'MyApp\Apple'; 

var_dump (is_subclass_of($apple, 'MyApp\Fruit')); 
var_dump (is_a($apple, 'MyApp\Apple')); 
var_dump (new $name); 

您需要在采取一个类名作为字符串而不是作为一个裸字功能完全限定您的命名空间名称。在裸语中的类在运行时解析。 Here's the PHP manual on namespace resolutionhere's a page with examples using strings to fully qualify namespaces

(另请注意单引号以防止反斜咀嚼。)