2013-12-15 1 views
1

Я пытаюсь работать с пространствами имен в Fat Free. Все работает отлично, но когда я объявления пространства имен, я получаю это:Работа с пространствами имен в Fat Free framework

Internal Server Error

Fatal error: Class 'Gadgets\iPad' not found 

вот мой код:

index.php

$f3=require('lib/base.php'); 

$f3->set('AUTOLOAD','ui/'); 

$f3->route('GET /', function(){ 

$obj=new Gadgets\iPad; 

echo $obj->hallo('cat'); 

}); 

$f3->run(); 

ui/iPad.php

namespace Gadgets; 

class iPad { 

    function hallo($word){ echo $word;}} 

Спасибо

+0

Не пользователь FFF, но попробуйте '$ obj = new \ Gadgets \ iPad();' поэтому вы начинаете с корневого пространства имен. – halfer

+0

Другая мысль - если 'iPad' находится в пространстве имен' Gadgets', не должно ли оно отображаться в папке «Гаджеты»? Это может потребоваться автозагрузчик (опять же, просто догадка). – halfer

+0

@halfer прав, ваш класс должен быть в ui/Gadgets/iPad.php – xfra35

ответ

1

Ваш файл класса должен появиться в ui\Gadgets папку (полный путь: ui\Gadgets\iPad.php) для того, чтобы F3, чтобы найти и автозагрузку его. См. this answer для получения дополнительной информации о поведении автозагрузчика F3.

Чтобы ответить на ваш комментарий «я думал, что я должен использовать пространство имен, так что я не должен сделать папку Gadgets», здесь есть две точки, чтобы иметь в виду:

  • пространств имен являются здесь, чтобы помочь вам организовать ваш код: сохраните все классы, связанные с общей функциональностью, в одно пространство имен.
  • автозагрузчик здесь, чтобы помочь вам организовать ваши файлы: сохранить один класс за файл и прекратить заботу о require или include звонки.

Обе функции (пространства имен/автозагрузчик) являются необязательными. Используйте их, если вы их понимаете и нуждаетесь в них.