2009-11-28 4 views
1

Почему я получаю ошибку? класс в том же пространстве имен ..Пространство имен и классы в php

PHP 5.3.0

namespace ExampleSystem\Core; 
class Test { 
    public function __construct() { 
     print 'Test ok'; 
    } 
} 

// Fatal error: Class 'Test' not found in ... 
$class_name = 'Test'; 
$obj = new $class_name; 

// Ok 
$class_name = 'ExampleSystem\Core\Test'; 
$obj = new $class_name; 

// Ok 
$obj = new Test; 
+3

Итак, это * то, что похоже на легендарные пространства имен ... –

ответ

2

Я не могу найти главу и стих в PHP руководстве, но очевидное объяснение состоит в том, что когда вы делаете:

$obj = new $string 

тогда значение $string не отображается в текущее пространство имен. Это имеет смысл, если учесть, что $string, возможно, был передан из другого места, где могло существовать другое пространство имен.

+0

Я бы ожидал, что он будет оцениваться в контексте пространства имён, но php редко делает то, что я ожидаю, и поскольку я ожидаю, что теперь, обычно делают это делать то, что я хочу. :) – mtvee

+0

Спасибо! Я нашел пример на сайте php.net ... Волшебная константа __NAMESPACE__ - это ответ :) http://il2.php.net/manual/en/language.namespaces.nsconstants.php Пример 3 – Alex

Смежные вопросы