Вот сценарий.
Я внедряю пространства имен в свои проекты.
У меня есть собственная пользовательская библиотека мостов, которая вызывает другие библиотеки, такие как 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']);
возможно ли каким-либо образом создать псевдоним или константу, которые могут быть доступны на глобальном уровне и не отбрасываться в конце каждого файла?
Какой-то загрузочный файл, который может сделать эти псевдонимы.
Когда я писал вопрос, я думал о решении.
Вы можете подделать его, создав классы, расширяющие классы с именами.
пример:
class arr extends BridgeLibName\Stdlib\Arrays{ }
Одна важная вещь, которую нужно помнить:
Если вы собираетесь расширять классы, должен быть загружен класс с именами.
Это может иметь последствия для производительности, если их использовать слишком много, поскольку псевдонимы и пространства имен загружаются по мере необходимости.
Поскольку я использую его только для подключения к другим классам, в моих файлах моста очень мало логики.
Эти файлы моста, в свою очередь, правильно используют псевдонимы и пространства имен, поэтому при необходимости загружают реальные файлы.
Я не осторожен с реализацией, вы можете загружать много ненужных вещей и заставлять ваше приложение становиться медленным и раздутым.
Замечательная вещь, которую я заметил, это то, что хорошие IDE, такие как netbeans, также, похоже, могут выполнить автозаполнение с помощью этого метода.
Если есть лучший способ сделать это, пожалуйста, дайте мне знать.
Просто подумал о поправке к этому методу, чтобы исправить проблему с ненужным экземпляром класса.
Основная библиотека может работать с обычным загрузчиком psr-0.
Чтобы создать автозагрузку псевдонимов, я создал дополнительный дочерний каталог, включенный рядом с моим классом с именами.
в композиторе вы описываете это так:
"autoload": { "psr-0": { "BridgeLibName\\": "." }, "classmap": ["include/"] }
Теперь ваши библиотеки будут загружаться, как ожидалось, из правильного пространства имен, и ваши классы псевдонимов будут автоматически загружаться по мере необходимости.
Классы, помещенные в каталог include, теперь могут расширять классы с именами (как показано выше) и больше не будут загружаться до их использования.
Теперь у вас есть глобальные псевдонимы, не жертвуя производительностью, загружая неиспользуемые классы.