2016-09-05 3 views
1

В настоящее время я строил проект, чтобы узнать структуру Slim. У меня довольно хорошее базовое понимание Slim, но пространства имен все еще довольно запутывают меня. Я сохраняю свои маршруты в отдельных файлах на основе той страницы, к которой они относятся (home, about, add и т. Д.). Проблема в том, что я не могу создать Request или Response объект без использованияКак включить пространство имен во включенный файл?

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

в верхней части каждого файла маршрута. Есть ли способ, который я могу положить use в верхней части моего основного файла маршрутов и использовать каждый включенный файл?

Например, файл routes.php включен в мой файл start.php, который включен в мой index.php. Внутри моего маршрута файл включает в себя каждый конкретный маршрут home.php, about.php, add.php, etc. Каждый файл, включенный в мой routes.php, должен иметь инструкцию use, иначе я не могу получить доступ к Response и Request без их имен.

+0

Нет, это невозможно в PHP. См. [Примеры SO Namespaces] (http://stackoverflow.com/documentation/php/1021/namespaces), [PHP Docs] (http://php.net/manual/en/language.namespaces.php) и [ Что такое пространства имен] (http://stackoverflow.com/questions/3384204/what-are-namespaces/3384384#3384384). –

ответ

2

Нет, вы не можете этого сделать. Rude explain - «Использовать оператор принадлежит файлу» (в случае, если мы не используем объявления пространства имен multipie в файле, что не рекомендуется). Вы также не можете расширять пространство имен, используя require/include.

test.php: 
    include "MyString.php"; 
    print ","; 
    print strlen("Hello world!"); 
MyString.php: 
    namespace MyFramework\String; 
    function strlen($str) { 
     return \strlen($str)*2; 
    } 
    print strlen("Hello world!"); 

Выход: 24,12

Но вы можете создать экземпляр свои объекты один раз в пространстве имен. И они будут доступны в других файлах пространства имен.

test.php: 
    namespace App; 
    include "request.php"; 
    var_dump($request); //$request object is available here 
request.php 
    namespace App; 
    use \Http\Request as Request; 
    $request = new Request(); 

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

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