Система пакетов
⚠️ Внимание, в данной статье описывается механизм, который находится в разработке и появится лишь в DevelNext 16.5 версии.
Система пакетов в jphp позволяет объединить несколько классов, функций и констант в один пакет. Затем, пакет можно легко подключить в скрипте через use <название пакета>
, благодаря чему в скрипте станут доступны все классы, функции и константы пакета.
ℹ️ Не стоит путать пакет jphp с пакетами расширений DevelNext. Пакет в jphp можно создать вне всякого расширения DevelNext. Это является новой возможностью языка php в рамках jphp.
Оглавление
- Что такое пакет?
- Структура пакета
- Автозагрузка пакетов
- Поддержка пакетов в DevelNext
- Пример использования
Что такое пакет?
Пакет - это способ легко объединять несколько классов, функций и констант под одним коротким именем. Пакет легко подключается в php файлах через конструкцию use <имя пакета>
, это похоже на то, как вы подключаете классы в php.
Пакеты выходят за рамки классического языка php и поддерживаются только в jphp и develnext.
Структура пакета
Пакет в jphp состоит из списка классов, функций и констант. Он имеет короткое название, которое всегда начинается с маленькой буквой. В итоге в пакете мы имеем:
- Имена классов
- Имена функций
- Имена констант
Имена должны быть полными, namespace классов, функций и констант может быть любой, нет никаких строгих правил на этот счет.
Автозагрузка пакетов
JPHP из коробки предоставляет механизм автозагрузки пакетов по аналогии с автозагрузкой классов. Реализуется он через класс php\lang\PackageLoader
и в движке для develnext реализован свой загрузчик пакетов FrameworkPackageLoader
, который реализует следующий механизм подключения пакетов:
- Все пакеты находятся в папке ресурсов
.packages
, в текстовом файле.packages/<имя пакета>.pkg
. - Опционально подключается файл
.packages/<имя пакета>.php
при подключении пакета (файл не обязателен). - Файл пакета
.pkg
содержит список классов, функций и констант в следующем формате:
[classes]
Class1
namespace1\Class2
...
[functions]
func1
func2
namespace1\func3
[constants]
constant1
namespace2\constant2
Для пакетов расширений этот механизм работает также!
Поддержка пакетов в DevelNext
DevelNext начиная с версии 16.5 поддерживает систему пакетов, описанную выше. Более того, многие классы из DevelNext входят в определенные пакеты, например:
gui
- пакет для JavaFX GUI компонентов.std
- общий пакет для всех стандартных классов из jphp.
Более того, develnext по-умолчанию помещает все классы проекта в определенный пакет, имя которого выбирается при создании проекта, по-умолчанию это app
.
--
Если вы пишите расширение для DevelNext, то для того, чтобы среда понимала, в каком пакете находится ваш класс, необходимо добавить следующий комментарий над классом:
/**
* @packages <название_пакета>
**/
class MyClass {
}
⚠️ Также не забудьте сформировать файл
.packages/<название пакета>.pkg
в папке расширенияvendor
, чтобы проект корректно компилировался с вашим пакетом.
Пример использования
use std, gui, framework, app; // подключаем 4 пакета.
$button = new UXButton(); // UXButton из пакета gui, не нужно писать use php\gui\UXButton, достаточно use gui.