[редактировать]

Система пакетов

⚠️ Внимание, в данной статье описывается механизм, который находится в разработке и появится лишь в DevelNext 16.5 версии.

Система пакетов в jphp позволяет объединить несколько классов, функций и констант в один пакет. Затем, пакет можно легко подключить в скрипте через use <название пакета>, благодаря чему в скрипте станут доступны все классы, функции и константы пакета.

ℹ️ Не стоит путать пакет jphp с пакетами расширений DevelNext. Пакет в jphp можно создать вне всякого расширения DevelNext. Это является новой возможностью языка php в рамках jphp.


Оглавление


Что такое пакет?

Пакет - это способ легко объединять несколько классов, функций и констант под одним коротким именем. Пакет легко подключается в php файлах через конструкцию use <имя пакета>, это похоже на то, как вы подключаете классы в php.

Пакеты выходят за рамки классического языка php и поддерживаются только в jphp и develnext.


Структура пакета

Пакет в jphp состоит из списка классов, функций и констант. Он имеет короткое название, которое всегда начинается с маленькой буквой. В итоге в пакете мы имеем:

  • Имена классов
  • Имена функций
  • Имена констант

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


Автозагрузка пакетов

JPHP из коробки предоставляет механизм автозагрузки пакетов по аналогии с автозагрузкой классов. Реализуется он через класс php\lang\PackageLoader и в движке для develnext реализован свой загрузчик пакетов FrameworkPackageLoader, который реализует следующий механизм подключения пакетов:

  1. Все пакеты находятся в папке ресурсов .packages, в текстовом файле .packages/<имя пакета>.pkg.
  2. Опционально подключается файл .packages/<имя пакета>.php при подключении пакета (файл не обязателен).
  3. Файл пакета .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.