PHP PSR-0 статический класс
Я пытаюсь переписать OO-сайт PHP (который слабо следует структуре MVC), чтобы он использовал пространства имен - и хочу следовать PSR-0.
На текущем сайте у меня есть класс (называемый APP), который полон статических методов, которые я вызываю повсеместно для обработки таких вещей, как получение данных конфигурации, например; APP::get_config('key')
,
Очевидно, что с пространством имен мне нужно было бы позвонить \TheNameSpace\App::get_config('key')
, Я часто использую этот класс, поэтому хочу избегать использования префикса пространства имен каждый раз, когда я его использую. Я вызываю в нем методы из других классов, которые обычно находятся в подпространстве имен, поэтому изменение пространства имен в верхней части файла не будет работать.
Итак, я предполагаю, что мой вопрос в том, что является самым простым способом иметь "глобальный" класс с методами, которые я могу вызывать где угодно, без необходимости каждый раз добавлять префикс к пространству имен?
3 ответа
Вверху ваших скриптов добавьте
use TheNameSpace\App as MyApp
например. Вы можете использовать его как
app = new MyApp();
в ваших сценариях. Конечно, вам не нужно использовать псевдоним здесь. Просто
use TheNameSpace\App
app = new App();
тоже будет работать
Глобальный класс, который реализует этот класс, является плохим стилем, и вы не должны делать это так:
class MyApp extends TheNameSpace\App { }
....
myApp = new MyApp();
Прочтите раздел в руководстве php по использованию / псевдонимам пространств имен.
http://www.php.net/manual/en/language.namespaces.importing.php
Вы можете исключить пространство имен с помощью "использования". Вы можете назвать это как хотите.
use TheNamespace\App as App //You can name it anything here
App:config('key');
namespace Foo;
use Bar;
Тогда вам не нужно делать \Bar\fn
Итак, в вашем случае:
namspace Foo;
use TheNameSpace\App;
App::get_config('blah')