2013-09-20 2 views
0

Я работаю над документацией AWS, которая использует структуру Guzzle. Мне нужно иметь дело с пространствами имен, и я не могу заставить его работать. Я просмотрел документы и примеры и понял, что у нас могут быть пакеты для проектов с использованием пространств имен.Использование пространств имен в PHP

Я пошел вперед и попробовал простой пример, но безуспешно. Вот пример: это index.php:

 use My\Full\Classname as Another; //Also tried use My\Full\Classname 
    $obj = new Another;    //with $obj = new Classname;  
    echo $obj->add(); 

У меня есть Classname.php в структуре каталогов, как этот My->Full->Classname.php:

 <?php 
     class Classname{ 
     public static function add(){ 
       return 2+2; 
      } 
     } 
    ?> 

Я пытаюсь вызвать функцию в index.php, но получаю ошибку:

Fatal error: Class 'Another' not found in C:\wamp\www\guzzleEx\index.php on line 19 

, который является строкой, в которой я создаю объект класса. $obj = new Another;

Какая ошибка я делаю? Есть ли INI, который необходимо обновить или любой другой вопрос конфигурации? Как я могу заставить код работать? Если вы используете обычный include для Classname.php, он отлично работает.

+0

Вам все равно необходимо включить (или загрузить) файл класса. Все 'use' делает это псевдоним имени класса с именами для имени голого класса. – halfer

+0

показать зарегистрированный автозагрузчик и включить 'namespace My \ Full;' в качестве первой строки в файле определения 'Classname' –

+0

Что такое зарегистрированный автозагрузчик? я просто следовал примеру над [здесь] (http://uk3.php.net/manual/en/language.namespaces.importing.php) – KillABug

ответ

1

Пространства имен должны быть явно объявлены, они не связаны с определенной структурой каталогов.

Итак, если у вас нет строки, которая читает namespace My\Full; перед вашим class Classname, то ваш класс не находится в каком-либо пространстве имен, а в корневом пространстве имен.

Таким образом, вы не можете использовать его как \My\Full\Classname, но \Classname или даже Classname напрямую.

+0

Я пробовал это 'namespace My \ Full; использование My \ Full \ Classname; $ obj = new Имя класса; echo $ obj-> add(); 'но все равно такая же ошибка! : P Мне также нужно изменить структуру dir, т. Е. Файл 'classname' на том же уровне равен' index' – KillABug

+0

Если вы не включили класс, его нельзя найти нигде. – Sven

+0

Хорошо, моя проблема заключается в том, что я пытаюсь использовать [Guzzle] (https://github.com/guzzle/guzzle), который поддерживает AWS api, и я хочу использовать его для [итераторов] (http://stackoverflow.com/questions/18893343/iterating-over-the-objects-in-a-folder-on-amazon-s3) (Это был мой вопрос для него). Так что здесь нет include-заявления в файлах. Так, они используют авто загрузить? Я загрузил его из GITHUB, но я получаю одинаковые ошибки для всех классов итераторов. Пожалуйста, предложите правильный путь. Мне нужно правильное направление. – KillABug

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