Этот вопрос немного странный и очень трудно объяснить, поэтому я постараюсь изо всех сил.PHP исключает использование пространства имен из файла
В принципе, мне было интересно, как на самом деле использовать классы внутри своих собственных файлов, а затем использовать пространство имен для этого класса в другом месте.
В качестве примера, который может знать большинство разработчиков PHP, например, Laravel с маршрутами, у вас есть файл route.php, который предназначен только для маршрутов, нет верхнего пространства имен, например: use Acme\Router
. Однако класс по-прежнему работает и не работает Не допускайте ошибок. Как это достигается?
Пример
Мой индекс нагрузки в композитору заряжания, который также загружает мой класс приложения
<?php
// Used namespace here to actually make it function
use Acme\Application as App;
require_once __DIR__ . '/vendor/autoload.php';
$app = new App;
$app->launch();
Запуск для того, что приложение должно сделать после запуска, здесь я имею в виду загрузку в маршруты и т. д. (я не уверен, что это правильный способ справиться с этим, но это мой лучший снимок.)
Класс такой же:
<?php
namespace Acme;
class Application
{
public function __construct()
{
}
public function launch()
{
// Require routes etc.
}
}
То, о чем я думал, первоначально требовал файлов, но я думал, что это будет плохая практика для require
файлов в рамках метода. И даже в этом случае это также станет огромным перечнем вещей, которые ему потребуются.
Однако то, что я пытался не получилось, что я пытаюсь сделать, это избежать use
в моем routes.php или и т.д., чтобы избежать список вещей, которые я хочу использовать такие как:
use Acme\Database\Handler;
use Acme\Router;
, потому что в конечном счете, это может стать довольно массивны.
Что я делаю неправильно и как я должен на самом деле подойти к этому?
Если вы хотите, чтобы избежать использования требуется, вы, конечно, должны искать SPL автозагрузчики. Здесь есть хороший стандарт: https://gist.github.com/jwage/221634. Большинство библиотек должны соответствовать этому шаблону (или что-то подобное и поставляться со своим автозагрузчиком). Он не решает проблему с пространством имен, но помогает в этом. –
В настоящее время я загружаю автозагрузку с использованием композитора и psr-4. Это не моя проблема, я боюсь, она использует классы, которые имеют пространство имен в других файлах, не имея длинного списка 'use' в верхней части. –
В этом случае вы, вероятно, захотите отказаться от ссылки на 'require' из вашего вопроса - это, безусловно, смутило меня! –