Skip to content

Commit dc388e0

Browse files
author
Dmitriy Zayceff
committed
Update
1 parent 84df848 commit dc388e0

File tree

8 files changed

+1253
-13
lines changed

8 files changed

+1253
-13
lines changed

PHP-API.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@
1111

1212
#### Базовая информация
1313
- [Язык PHP](Язык-PHP)
14-
- [Автозагрузка классов](ClassLoading)
15-
- [Система пакетов в jphp](PackageSystem)
14+
- [Автозагрузка классов](api/ClassLoading)
15+
- [Система пакетов в jphp](api/PackageSystem)
1616

1717
#### Примитивные данные
18-
- [str](str) - работа с текстом и строками.
19-
- [arr](arr) - работа с массивами и итераторами.
20-
- char - работа с текстовыми символами.
21-
- bin - работа с бинарными данными, бинарными строками.
22-
- [reflect](reflect) - работа с рефлексией, данные о типах.
23-
- [fs](fs) - работа с файлами и папками.
18+
- [str](api/str) - работа с текстом и строками.
19+
- [arr](api/arr) - работа с массивами и итераторами.
20+
- [char](api/char) - работа с текстовыми символами.
21+
- [bin](api/bin) - работа с бинарными данными, бинарными строками.
22+
- [reflect](api/reflect) - работа с рефлексией, данные о типах.
23+
- [fs](api/fs) - работа с файлами и папками.
2424

2525
#### Время и дата
26-
- [Time](Time) - класс для времени и даты.
27-
- [TimeZone](TimeZone) - временная зона.
28-
- [TimeFormat](TimeFormat) - форматирование и парсинг даты и времени.
26+
- [Time](api/Time) - класс для времени и даты.
27+
- [TimeZone](api/TimeZone) - временная зона.
28+
- [TimeFormat](api/TimeFormat) - форматирование и парсинг даты и времени.
2929

3030
#### Файлы, IO, потоки данных.
31-
- [fs](fs) - утилитный класс для работы с файловой системой.
32-
- [File](File) - файл или директория.
31+
- [fs](api/fs) - утилитный класс для работы с файловой системой.
32+
- [File](api/File) - файл или директория.
3333
- [Stream](Stream) - базовый класс IO, поток данных.
3434
- [FileStream](FileStream) - файловый поток данных.
3535
- [ResourceStream](ResourceStream) - ресурсный поток данных.

api/ClassLoading.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Автозагрузка классов
2+
3+
DevelNext и JPHP по-умолчанию используют автозагрузку классов, используя имена классов. Автозагрузка, это способ автоматически подключать файлы с классами по мере их использования. Это означает, что класс не будет загружен в систему до тех пор, пока он не будет где-то использован в коде.
4+
5+
---
6+
7+
- [Название классов](#%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2)
8+
- [Механизм загрузки](#%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8)
9+
- [Ресурсы и протокол `res://`](#%D0%A0%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B-%D0%B8-%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB-res)
10+
- [Смотрите также](#%D0%A1%D0%BC%D0%BE%D1%82%D1%80%D0%B8%D1%82%D0%B5-%D1%82%D0%B0%D0%BA%D0%B6%D0%B5)
11+
12+
---
13+
14+
#### Название классов
15+
Название классов в php обычно состоит из namespace и короткого названия. Для примера разберем класс `php\gui\UXButton`.
16+
```php
17+
<?php
18+
namespace php\gui;
19+
20+
class UXButton {
21+
22+
}
23+
```
24+
Здесь мы видим класс UXButton, который объявляется внутри пространства имен `php\gui`. По этим критериям формируется полное название класса, т.е. `php\gui` + `UXButton` и выход `php\gui\UXButton`.
25+
26+
> Символ `\` в названиях является частью синтаксиса php и является символом разделителя в `namespace`.
27+
28+
---
29+
30+
#### Механизм загрузки
31+
В php есть стандартный механизм автоподгрузки классов, см. [здесь](http://php.net/manual/ru/language.oop5.autoload.php).
32+
С помощью этого механизма, в DevelNext реализована следующая схема:
33+
34+
1. Встречается класс `php\gui\UXButton`.
35+
2. Если класс еще не существует, срабатывает загрузчик.
36+
3. Загрузчику передается полное название класса, т.е. `php\gui\UXButton`.
37+
4. По названию класса загрузчик формирует путь к php файлу с классом.
38+
5. DevelNext его сформирует как `res://php/gui/UXButton.php`, файл из ресурсов.
39+
6. Происходит `include "res://php/gui/UXButton.php"`.
40+
41+
---
42+
43+
#### Ресурсы и протокол res://
44+
Протокол `res://` - это системный протокол внутри JPHP и DevelNext, он помогает обращаться к любым файлам из ресурсных источников. Если вы разрабатываете проект в DevelNext, то ресурсной папкой будет `<путь к проекту>/src`. После компиляции, все файлы внутри `src` попадают в исполняемый файл и их по прежнему можно читать по протоколу `res://`, хоть они уже и находятся внутри вашего приложения.
45+
46+
---
47+
48+
#### Смотрите также
49+
Посмотрите альтернативный обзор этой возможности в статье нашего активного пользователя [https://tssaltan.ru/969.develnext-подключение-сторонних-классов/](https://tssaltan.ru/969.develnext-подключение-сторонних-классов/).

api/PackageSystem.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Система пакетов
2+
3+
> ⚠️ Внимание, в данной статье описывается механизм, который находится в разработке и появится лишь в DevelNext 16.5 версии.
4+
5+
Система пакетов в jphp позволяет объединить несколько классов, функций и констант в один пакет. Затем, пакет можно легко подключить в скрипте через `use <название пакета>`, благодаря чему в скрипте станут доступны все классы, функции и константы пакета.
6+
7+
> ℹ️ Не стоит путать пакет jphp с пакетами расширений DevelNext. Пакет в jphp можно создать вне всякого расширения DevelNext. Это является новой возможностью языка php в рамках jphp.
8+
9+
---
10+
11+
#### Оглавление
12+
- [Что такое пакет?](#what)
13+
- [Структура пакета](#structure)
14+
- [Автозагрузка пакетов](#autoloading)
15+
- [Поддержка пакетов в DevelNext](#develnext)
16+
- [Пример использования](#example)
17+
18+
---
19+
20+
<a name=what/>
21+
### Что такое пакет?
22+
23+
Пакет - это способ легко объединять несколько классов, функций и констант под одним коротким именем. Пакет легко подключается в php файлах через конструкцию `use <имя пакета>`, это похоже на то, как вы подключаете классы в php.
24+
25+
> Пакеты выходят за рамки классического языка php и поддерживаются только в jphp и develnext.
26+
27+
---
28+
29+
<a name=structure/>
30+
### Структура пакета
31+
Пакет в jphp состоит из списка классов, функций и констант. Он имеет короткое название, которое всегда начинается с маленькой буквой. В итоге в пакете мы имеем:
32+
- Имена классов
33+
- Имена функций
34+
- Имена констант
35+
36+
> Имена должны быть полными, namespace классов, функций и констант может быть любой, нет никаких строгих правил на этот счет.
37+
38+
---
39+
40+
<a name=autoloading />
41+
### Автозагрузка пакетов
42+
43+
JPHP из коробки предоставляет механизм автозагрузки пакетов по аналогии с автозагрузкой классов. Реализуется он через класс `php\lang\PackageLoader` и в движке для develnext реализован свой загрузчик пакетов [`FrameworkPackageLoader`](https://github.com/jphp-compiler/develnext/blob/master/jphp-app-framework/src/php/framework/FrameworkPackageLoader.php), который реализует следующий механизм подключения пакетов:
44+
45+
1. Все пакеты находятся в папке ресурсов `.packages`, в текстовом файле `.packages/<имя пакета>.pkg`.
46+
2. Опционально подключается файл `.packages/<имя пакета>.php` при подключении пакета (файл не обязателен).
47+
3. Файл пакета `.pkg` содержит список классов, функций и констант в следующем формате:
48+
```ini
49+
[classes]
50+
Class1
51+
namespace1\Class2
52+
...
53+
54+
[functions]
55+
func1
56+
func2
57+
namespace1\func3
58+
59+
[constants]
60+
constant1
61+
namespace2\constant2
62+
```
63+
64+
> Для пакетов расширений этот механизм работает также!
65+
66+
---
67+
68+
<a name=develnext />
69+
### Поддержка пакетов в DevelNext
70+
71+
DevelNext начиная с версии 16.5 поддерживает систему пакетов, описанную выше. Более того, многие классы из DevelNext входят в определенные пакеты, например:
72+
73+
- `gui` - пакет для JavaFX GUI компонентов.
74+
- `std` - общий пакет для всех стандартных классов из jphp.
75+
76+
Более того, develnext по-умолчанию помещает все классы проекта в определенный пакет, имя которого выбирается при создании проекта, по-умолчанию это `app`.
77+
78+
--
79+
80+
Если вы пишите расширение для DevelNext, то для того, чтобы среда понимала, в каком пакете находится ваш класс, необходимо добавить следующий комментарий над классом:
81+
82+
```php
83+
/**
84+
* @packages <название_пакета>
85+
**/
86+
class MyClass {
87+
88+
}
89+
```
90+
91+
> ⚠️ Также не забудьте сформировать файл `.packages/<название пакета>.pkg` в папке расширения `vendor`, чтобы проект корректно компилировался с вашим пакетом.
92+
93+
---
94+
95+
<a name=example />
96+
### Пример использования
97+
98+
```php
99+
use std, gui, framework, app; // подключаем 4 пакета.
100+
101+
$button = new UXButton(); // UXButton из пакета gui, не нужно писать use php\gui\UXButton, достаточно use gui.
102+
```

api/Time.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Класс `Time`
2+
3+
- **class** `Time` (`php\time\Time`).
4+
- **package** `std`.
5+
6+
Класс для отражения сущности времени и даты, каждый объект данного класса хранит конкретную дату и время, а также предоставляет методы для получения различной информации о своей дате и времени.
7+
8+
---
9+
10+
#### Методы
11+
- [Конструктор (`new`)](#__construct) `__construct` - _создание объекта времени_
12+
- `->`[`getTime()`](#gettime) - _получить unix timestamp число в миллисекундах_
13+
- `->`[`getTimeZone()`](#gettimezone) - _получить временную зону объекта_
14+
- `->`[`year()`](#year) - _год объекта_
15+
- `->`[`month()`](#month) - _месяц объекта_
16+
- `->`[`week()`](#week) - _неделя объекта в рамках года_
17+
- `->`[`weekOfMonth()`](#weekofmonth) - _неделя объекта в рамках месяца_
18+
- `->`[`day()`](#day) - _номер дня в году_
19+
- `->`[`dayOfMonth()`](#dayofmonth) - _номер дня в месяце_
20+
- `->`[`dayOfWeek()`](#dayofweek) - _номер дня в неделе_
21+
- `->`[`dayOfWeekInMonth()`](#dayofweekinmonth) - _номер дня в неделя относительно месяца_
22+
- `->`[`hour()`](#hour) - _час в 12 часовом формате_
23+
- `->`[`hourOfDay()`](#hourofday) - _час в 24 часовом формате_
24+
- `->`[`minite()`](#minute) - _минута в часе_
25+
- `->`[`second()`](#second) - _секунда в минуте_
26+
- `->`[`compare()`](#compare) - _сравнить с другой датой_
27+
- `->`[`withTimeZone()`](#withtimezone) - _та же дата с другой временной зоной_
28+
- `->`[`add()`](#add) - _новая дата с добавленным временем_
29+
- `->`[`replace()`](#replace) - _новая дата с измененным временем_
30+
- `->`[`toString()`](#tostring) - _конвертировать дату в строку_
31+
32+
#### Статичные методы
33+
- `Time ::`[`now()`](#now) - _текущая дата и время_
34+
- `Time ::`[`today()`](#today) - _текущая дата без времени_
35+
- `Time ::`[`of()`](#of) - _создание даты и времени_
36+
- `Time ::`[`seconds()`](#seconds) - _unix timestamp в секундах_
37+
- `Time ::`[`millis()`](#millis) - _unix timestamp в миллисекундах_
38+
- `Time ::`[`nanos()`](#nanos) - _unix timestamp в наносекундах_

0 commit comments

Comments
 (0)