Intereting Posts
Как остановить xdebug от остановки в первой строке с помощью PhpStorm? Как я могу защитить этот код от SQL Injection? Немного смущен Идентификатор процесса проверки PHP Как вставить элемент в массивы в определенном месте? Пользовательское мобильное меню в Drupal 7 не может получить доступ к дочерним ссылкам Добавление рекламного продукта при достижении определенной суммы корзины PHP: обслуживать страницы без файлов .php в файловой структуре Сессии Отказоустойчивость с PHP-memcache против memcached Как удалить не буквенно-цифровые символы? Как вернуть только имена групп с preg_match или preg_match_all? Сохранить строку запроса для перезаписи .htaccess Как преобразовать предложение в массив слов? Отправка и получение данных от Flash AS3 до PHP Самый чистый способ читать настройки конфигурации из файла PHP и загружать весь код проекта с помощью сценария оболочки нажатие на ссылку должно отображать результат на той же странице. Кнопка BACK и REFRESH должна работать нормально

PHP Глобальные псевдонимы пространства имен

Вот сценарий.

Я внедряю пространства имен в свои проекты.

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

У меня нет проблем с использованием полных имен пространств имен в моей пользовательской библиотеке мостов, но хотелось бы сохранить код как можно более кратким в моих контроллерах, моделях и представлении.

Вот пример некоторых алиасов, которые я хотел бы использовать:

use BridgeLibName\Stdlib\Arrays as arr; use BridgeLibName\Stdlib\Objects as obj; use BridgeLibName\Stdlib\Strings as str; use BridgeLibName\Stdlib\Numbers as num; use BridgeLibName\Stdlib\File as file; etc......... 

Пример использования:

 $file = new file('path/to/file.txt'); $file->create(); 

или

 $obj = arr::toObject(['key1'=>'value1']); 

возможно ли каким-либо образом создать псевдоним или константу, которые могут быть доступны на глобальном уровне и не отбрасываться в конце каждого файла?

Какой-то загрузочный файл, который может сделать эти псевдонимы.

Related of "PHP Глобальные псевдонимы пространства имен"

Когда я писал вопрос, я думал о решении.

Вы можете подделать его, создав классы, расширяющие классы с именами.

пример:

 class arr extends BridgeLibName\Stdlib\Arrays{ } 

Одна важная вещь, которую нужно помнить:

Если вы собираетесь расширять классы, должен быть загружен класс с именами.

Это может иметь последствия для производительности, если их использовать слишком много, поскольку псевдонимы и пространства имен загружаются по мере необходимости.

Поскольку я использую его только для подключения к другим классам, в моих файлах моста очень мало логики.

Эти файлы моста, в свою очередь, правильно используют псевдонимы и пространства имен, поэтому при необходимости загружают реальные файлы.

Я не осторожен с реализацией, вы можете загружать много ненужных вещей и заставлять ваше приложение становиться медленным и раздутым.


Замечательная вещь, которую я заметил, это то, что хорошие IDE, такие как netbeans, также, похоже, могут выполнить автозаполнение с помощью этого метода.


Если есть лучший способ сделать это, пожалуйста, дайте мне знать.


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

Основная библиотека может работать с обычным загрузчиком psr-0.

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

в композиторе вы описываете это так:

 "autoload": { "psr-0": { "BridgeLibName\\": "." }, "classmap": ["include/"] } 

Теперь ваши библиотеки будут загружаться, как ожидалось, из правильного пространства имен, и ваши классы псевдонимов будут автоматически загружаться по мере необходимости.

Классы, помещенные в каталог include, теперь могут расширять классы с именами (как показано выше) и больше не будут загружаться до их использования.

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