20250709 1.1.1 Beta 2
This commit is contained in:
parent
6e831e2650
commit
83a76dc8e2
168
sources/extensions/TypeExtension.php
Normal file
168
sources/extensions/TypeExtension.php
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\extensions;
|
||||||
|
|
||||||
|
use DateMalformedStringException;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use DateTimeInterface;
|
||||||
|
use Exception;
|
||||||
|
use UnitEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Расширение для любого типа.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.1.1
|
||||||
|
*/
|
||||||
|
final class TypeExtension
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Переводит объект в массив.
|
||||||
|
*
|
||||||
|
* @return array Массив свойств типа.
|
||||||
|
*/
|
||||||
|
public function ToArray (object $class): array
|
||||||
|
{
|
||||||
|
// Создаю массив результата
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
// Получаю свойства класса
|
||||||
|
$properties = get_object_vars($class);
|
||||||
|
|
||||||
|
// Для каждого свойства класса
|
||||||
|
foreach ($properties as $key => $value) {
|
||||||
|
// - если значение является датой
|
||||||
|
if ($value instanceof DateTimeInterface) {
|
||||||
|
|
||||||
|
// -- добавляю в массив
|
||||||
|
$result[$key] = $value->getTimestamp();
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - если значение является перечислением
|
||||||
|
if ($value instanceof UnitEnum) {
|
||||||
|
// -- получаю перечисление
|
||||||
|
$result[$key] = $value->name;
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - если значение является NULL
|
||||||
|
if (is_null($value)) {
|
||||||
|
// -- присваиваю NULL
|
||||||
|
$result[$key] = "null";
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - присваиваю значение
|
||||||
|
$result[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Возвращаю результат
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Переводит массив в объект.
|
||||||
|
*
|
||||||
|
* @param array $array Массив свойств.
|
||||||
|
* @param string $className Требуемый класс (внимание: с namespace!).
|
||||||
|
*
|
||||||
|
* @return mixed Объект типа $className.
|
||||||
|
* @throws Exception Исключение, если объект не создан, или дата не корректного формата или пытается передать null
|
||||||
|
* не nullable типу.
|
||||||
|
*/
|
||||||
|
public function FromArray (array $array, string $className): object
|
||||||
|
{
|
||||||
|
// Создаем объект
|
||||||
|
$instance = new $className();
|
||||||
|
|
||||||
|
// Проверяем, что объект создан
|
||||||
|
if (!is_object($instance) && $instance instanceof $className)
|
||||||
|
// - если нет, то выбрасываю исключение
|
||||||
|
throw new Exception("Object is not created / Объект не создан.");
|
||||||
|
|
||||||
|
// Получаю свойства класса
|
||||||
|
$properties = get_object_vars($instance);
|
||||||
|
|
||||||
|
// Для каждого свойства класса
|
||||||
|
foreach ($properties as $key => $value) {
|
||||||
|
// - проверяю, есть ли свойство в массиве
|
||||||
|
if (!array_key_exists($key, $array))
|
||||||
|
// -- если нет, то пропускаю
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// - получаю значение из массива
|
||||||
|
$value = $array[$key];
|
||||||
|
|
||||||
|
// - если значение является датой DateTime
|
||||||
|
if ($instance->$key instanceof DateTime && is_int($value)) {
|
||||||
|
// -- присваиваю значение
|
||||||
|
try {
|
||||||
|
$instance->$key = new DateTime ('@' . $value);
|
||||||
|
}
|
||||||
|
catch (DateMalformedStringException) {
|
||||||
|
throw new Exception("Date is not correct format / Дата не корректного формата.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - если значение является датой DateTimeImmutable
|
||||||
|
if ($instance->$key instanceof DateTimeImmutable && is_int($value)) {
|
||||||
|
// -- присваиваю значение
|
||||||
|
try {
|
||||||
|
$instance->$key = new DateTimeImmutable('@' . $value);
|
||||||
|
}
|
||||||
|
catch (DateMalformedStringException) {
|
||||||
|
// -- создаю дату с нулевым временем, если ошибка
|
||||||
|
$instance->$key = new DateTimeImmutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - если значение является перечислением
|
||||||
|
if ($instance->$key instanceof UnitEnum) {
|
||||||
|
// -- получаю все значения перечисления
|
||||||
|
foreach ($instance->$key::getCases() as $case)
|
||||||
|
// --- если значение совпадает
|
||||||
|
if ($case->name === $value)
|
||||||
|
// ---- присваиваю значение
|
||||||
|
$instance->$key = $case;
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - если значение является NULL
|
||||||
|
if ($value = "null") {
|
||||||
|
// -- присваиваю NULL
|
||||||
|
try {
|
||||||
|
$instance->$key = null;
|
||||||
|
}
|
||||||
|
catch (Exception $exception) {
|
||||||
|
throw new Exception("Cannot assign null to non-nullable property. / Невозможно присвоить null не nullable типу: {$exception->getMessage()}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- следующий элемент
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - присваиваю значение
|
||||||
|
$instance->$key = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Возвращаю объект
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
}
|
@ -1,710 +0,0 @@
|
|||||||
# Описание класса JsonReWriter
|
|
||||||
|
|
||||||
## Информация о версии
|
|
||||||
|
|
||||||
Версия класса: 1.0
|
|
||||||
|
|
||||||
Впервые введено в пакет с версии: 1.1.0
|
|
||||||
|
|
||||||
Описание класса: Класс для работы с JSON-файлами.
|
|
||||||
|
|
||||||
## Публичные свойства и константы класса
|
|
||||||
|
|
||||||
В классе определены следующие свойства:
|
|
||||||
|
|
||||||
- `string $JsonString` - строка JSON (чтение/запись).
|
|
||||||
|
|
||||||
## Быстрый старт
|
|
||||||
|
|
||||||
### Правила формирования ключей.
|
|
||||||
|
|
||||||
Ключ для чтения/записи данных класса формируется следующим образом: `ключ/подключ/подключ подключа` .
|
|
||||||
|
|
||||||
Например, если дан json-файл:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Пусть требуется получить значение `BBB`, тогда ключ должен быть `test/subtest/BBB`.
|
|
||||||
|
|
||||||
### Чтение.
|
|
||||||
|
|
||||||
1. Создайте элемент класса `$json = new JsonReWriter ();`
|
|
||||||
2. Если у вас требуется загрузить json из файла `$fileName`, то воспользуйтесь методом `LoadFromFile`:
|
|
||||||
`$json->LoadFromFile($fileName);`, если же json представлен строкой `$jsonStr`, то загрузите её в свойство
|
|
||||||
`$JsonString`: `$json->JsonString = $jsonStr;`
|
|
||||||
3. Далее можно пользоваться любым методом для чтения `Read*`, в том числе и общим `$json->Read(...)`.
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загшружаю данные из файла
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
// Получаю число
|
|
||||||
$float = $json->ReadFloat("test/subtest/BBB", 0.2);
|
|
||||||
|
|
||||||
В итоге в `$float` будет `1.23`.
|
|
||||||
|
|
||||||
### Запись.
|
|
||||||
|
|
||||||
1. Создайте элемент класса `$json = new JsonReWriter ();`
|
|
||||||
2. Далее можно пользоваться любым методом для записи `Write*`, в том числе и общим `$json->Write(...)`.
|
|
||||||
3. Если вам требуется создать json файл с именем `$fileName`, то воспользуйтесь методом `SaveToFile`:
|
|
||||||
`$json->SaveToFile($fileName);`, если же json должен быть представлен строкой `$jsonStr`, то загрузите её из свойства
|
|
||||||
`$JsonString`: `$jsonStr = $json->JsonString;`
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загшружаю данные из файла
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
// Получаю число
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/BBB", 0.2);
|
|
||||||
}
|
|
||||||
catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
В итоге в `test/subtest/BBB` вместо `1.23` будет `0.2`.
|
|
||||||
|
|
||||||
## Коды ошибок JsonErrorCode
|
|
||||||
|
|
||||||
Ниже представлена таблица основных кодов ошибки:
|
|
||||||
|
|
||||||
| Ошибка | Описание | Введено с версии |
|
|
||||||
|:-------------------:|:---------------------------------------------------------------------------:|:----------------:|
|
|
||||||
| Unknown | Неизвестная ошибка | 1.0 |
|
|
||||||
| None | Ошибок нет | 1.0 |
|
|
||||||
| Depth | Достигнута максимальная глубина стека | 1.0 |
|
|
||||||
| StateMismatch | Неверный или некорректный JSON | 1.0 |
|
|
||||||
| CTRLChar | Ошибка управляющего символа, возможно, неверная кодировка | 1.0 |
|
|
||||||
| Syntax | Синтаксическая ошибка | 1.0 |
|
|
||||||
| UTF8 | Некорректные для кодировки UTF-8 символы, возможно, неверная кодировка | 1.0 |
|
|
||||||
| Recursion | Одна или несколько зацикленных ссылок в кодируемом значении | 1.0 |
|
|
||||||
| InfOrNan | Одно или несколько значений NAN или INF в кодируемом значении | 1.0 |
|
|
||||||
| UnsupportedType | Передали значение с неподдерживаемым типом | 1.0 |
|
|
||||||
| InvalidPropertyName | Имя свойства не может быть закодировано | 1.0 |
|
|
||||||
| UTF16 | Некорректный для кодировки UTF-16 символ, возможно, некорректно закодирован | 1.0 |
|
|
||||||
| KeyIsNotArray | Ключ не содержит вложений, хотя от него требуется обратное | 1.0 |
|
|
||||||
| NotISerializable | Класс не реализует интерфейс ISerializable | 1.0 |
|
|
||||||
|
|
||||||
### Методы и функции перечисления JsonErrorCode
|
|
||||||
|
|
||||||
Перечисление содержит **статический метод** `static function FromLastError (): JsonErrorCode`, который получает код
|
|
||||||
ошибки из последней JSON ошибки.
|
|
||||||
|
|
||||||
Например, при успешной загрузке, можем проверить ошибки:
|
|
||||||
|
|
||||||
$errors = JsonErrorCode::FromLastError ();
|
|
||||||
|
|
||||||
После того, как мы выведем `$errors`, мы получим `JsonErrorCode::None`.
|
|
||||||
|
|
||||||
## Исключение JsonException
|
|
||||||
|
|
||||||
Исключение расширяет класс `Exception`, поэтому может выбрасываться через `throw`.
|
|
||||||
|
|
||||||
### Свойства
|
|
||||||
|
|
||||||
Исключение содержит следующие свойства:
|
|
||||||
|
|
||||||
- `?string $JsonString` - строка JSON (или null);
|
|
||||||
- `JsonErrorCode $ErrorCode` - код ошибки JSON;
|
|
||||||
- `?string $ErrorMessage` - сообщение об ошибке JSON (в отличие от функции json_last_error_msg(), данная переменная при
|
|
||||||
отсутствии ошибок выводит null, а не "No error").
|
|
||||||
|
|
||||||
### Методы и функции
|
|
||||||
|
|
||||||
#### Конструктор.
|
|
||||||
|
|
||||||
Конструктор принимает **3 необязательных параметра**:
|
|
||||||
|
|
||||||
* `?string $json` - строка JSON (по умолчанию, `null`);
|
|
||||||
* `JsonErrorCode $errorCode` - код ошибки (по умолчанию, `JsonErrorCode::Unknown`);
|
|
||||||
* `?string $errorMessage` - сообщение об ошибке (по умолчанию, `null`).
|
|
||||||
|
|
||||||
В результате создаётся новое исключение `JsonException`.
|
|
||||||
|
|
||||||
Пример:
|
|
||||||
|
|
||||||
throw new JsonException("{}", JsonErrorCode::Depth, "Пример");
|
|
||||||
|
|
||||||
Создаст исключение `JsonException`.
|
|
||||||
|
|
||||||
## Методы и функции
|
|
||||||
|
|
||||||
### Конструктор и деструктор.
|
|
||||||
|
|
||||||
Конструктор не принимает никаких параметров.
|
|
||||||
|
|
||||||
В результате создаётся новый класс `JsonReWriter`.
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Контсуктор
|
|
||||||
$json = new JsonReWriter ();
|
|
||||||
// Деструктор
|
|
||||||
unset($json);
|
|
||||||
|
|
||||||
Создаст и уничтожит класс `JsonReWriter`.
|
|
||||||
|
|
||||||
### Сохранение и загрузка из файла.
|
|
||||||
|
|
||||||
За сохранение и загрузку отвечают 2 метода: `SaveToFile` и `LoadFromFile`.
|
|
||||||
|
|
||||||
#### Сохранение в файл (метод `SaveToFile`)
|
|
||||||
|
|
||||||
Этот метод сохраняет содержимое JSON в файл. Он содержит **1 обязательный параметр**:
|
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
|
||||||
|
|
||||||
Метод возвращает `bool` - сохранены ли данные в файл: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function SaveToFile (string $fileName): bool
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Сохраняем созданный JSON файл
|
|
||||||
$json->SaveToFile($fileName);
|
|
||||||
|
|
||||||
Содержимое файла `test.json` представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#### Загрузка файла (метод `LoadFromFile`)
|
|
||||||
|
|
||||||
Этот метод загружает содержимое файла в класс. Он содержит **1 обязательный параметр**:
|
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
|
||||||
|
|
||||||
Метод возвращает `bool` - загружены ли данные из файла: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function LoadFromFile (string $fileName): bool
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
Пусть дан файл `test.json`, содержимое которого представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Следующий код загрузит это содержимое в класс:
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загружаю данные
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
|
|
||||||
### Чтение данных
|
|
||||||
|
|
||||||
Для чтения данных используется один общий метод `Read` и 7 его производных метода: `ReadString`, `ReadInt`, `ReadFloat`,
|
|
||||||
`ReadBool`, `ReadArray`, `ReadObject` и `ReadSerializable`.
|
|
||||||
|
|
||||||
#### Метод `Read`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `mixed $default` (значение по умолчанию, задан по умолчанию в `null`).
|
|
||||||
|
|
||||||
Этот метод возвращает `mixed`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Read (string $key, mixed $default = null): mixed
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполняю данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->Write("test3/test/res", json_encode([1, 2, 3]));
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Получаю значение
|
|
||||||
$float = (float)$json->Read("test/subtest/BBB"));
|
|
||||||
|
|
||||||
В результате, переменная `$float` будет иметь значение `1.23`.
|
|
||||||
|
|
||||||
#### Метод `ReadString`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `string $default` (значение по умолчанию, задан по умолчанию в `""`).
|
|
||||||
|
|
||||||
Этот метод возвращает `string`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadString (string $key, string $default = ""): string
|
|
||||||
|
|
||||||
#### Метод `ReadInt`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `int $default` (значение по умолчанию, задан по умолчанию в `0`).
|
|
||||||
|
|
||||||
Этот метод возвращает `int`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadInt (string $key, int $default = 0): int
|
|
||||||
|
|
||||||
#### Метод `ReadFloat`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `float $default` (значение по умолчанию, задан по умолчанию в `0.0`).
|
|
||||||
|
|
||||||
Этот метод возвращает `float`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadFloat (string $key, float $default = 0.0): float
|
|
||||||
|
|
||||||
#### Метод `ReadBool`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `bool $default` (значение по умолчанию, задан по умолчанию в `false`).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadBool (string $key, bool $default = false): bool
|
|
||||||
|
|
||||||
#### Метод `ReadArray`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `array $default` (значение по умолчанию, задан по умолчанию в `[]`).
|
|
||||||
|
|
||||||
Этот метод возвращает `array`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadArray (string $key, array $default = []): array
|
|
||||||
|
|
||||||
#### Метод `ReadObject`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `object $default` (значение по умолчанию).
|
|
||||||
|
|
||||||
Этот метод возвращает `object`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadObject (string $key, object $default): object
|
|
||||||
|
|
||||||
#### Метод `ReadSerializable`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `string $serializableClassName` (имя класса, реализующего интерфейс ISerializable, с namespace).
|
|
||||||
|
|
||||||
Этот метод возвращает класс, реализующий интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
**Важно!** Этот метод может выбросить исключение `JsonException`, если класс, заданный в `$serializableClassName` не
|
|
||||||
реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadSerializable (string $key, string $serializableClassName): ISerializable
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
Пусть для примера, класс `Demo` из namespace `iam\namespace` реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// ... Здесь где-то загрузка данных
|
|
||||||
// Получаю класс
|
|
||||||
try {
|
|
||||||
/**
|
|
||||||
* @var Demo $unSerializableClass
|
|
||||||
*/
|
|
||||||
$unSerializableClass = $json->ReadSerializable("test", "iam\\namespace\\Demo");
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
В результате, переменная `$unSerializableClass` будет содержать данные класса `Demo`.
|
|
||||||
|
|
||||||
### Запись данных
|
|
||||||
|
|
||||||
Для чтения данных используется один общий метод `Write` и 3 его производных метода: `WriteArray`, `WriteObject` и
|
|
||||||
`WriteSerializable`.
|
|
||||||
|
|
||||||
**Важно!** Лобой из вышеуказанных методов может выбросить исключение `JsonException`, если ключ не содержит вложений,
|
|
||||||
хотя от него требуется обратное.
|
|
||||||
|
|
||||||
#### Метод `Write`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `mixed $value` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Write (string $key, mixed $value): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Сохраняем созданный JSON файл
|
|
||||||
$json->SaveToFile($fileName);
|
|
||||||
|
|
||||||
Содержимое файла `test.json` представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#### Метод `WriteArray`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `array $array` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteArray (string $key, array $array): void
|
|
||||||
|
|
||||||
#### Метод `WriteObject`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `object $value` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteObject (string $key, object $value): void
|
|
||||||
|
|
||||||
#### Метод `WriteSerializable`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `ISerializable $serializableValue` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteSerializable (string $key, ISerializable $serializableValue): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
Пусть для примера, класс `Demo` из namespace `iam\namespace` реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Создаём класс Demo
|
|
||||||
$serializableClass = new Demo(...);
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->WriteSerializable("test", $serializableClass);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
...
|
|
||||||
|
|
||||||
### Работа с ключами JSON
|
|
||||||
|
|
||||||
Для работы с ключами JSON есть 2 метода: `IsKeyExists` и `GetKeys`.
|
|
||||||
|
|
||||||
#### Метод `IsKeyExists`
|
|
||||||
|
|
||||||
Это метод проверяем наличие ключа в JSON. Он имеет **1 обязательный параметр** - `string $key` (ключ).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool`: `true` если ключ найден и `false` в противном случае.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function IsKeyExists (string $key): bool
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Проверяем ключи
|
|
||||||
$check1 = $json->IsKeyExists("test/subtest/AAA");
|
|
||||||
$check2 = $json->IsKeyExists("test/subtest/ССС");
|
|
||||||
|
|
||||||
В результате, `$check1` будет `true`, а `$check2` - `false`.
|
|
||||||
|
|
||||||
#### Метод `GetKeys`
|
|
||||||
|
|
||||||
Это метод получает список ключей. Он имеет **2 необязательных параметра**:
|
|
||||||
|
|
||||||
- `string $parentKey` (ключ родителя (или "" (установлено по умолчанию) для всех);
|
|
||||||
- `bool $includeChildren` (нужно ли включать дочерние ключи (по умолчанию, да)).
|
|
||||||
|
|
||||||
Этот метод возвращает `array`: список ключей.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function GetKeys (string $parentKey = "", bool $includeChildren = true): array
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Получаем ключи
|
|
||||||
$keys1 = $json->GetKeys("test");
|
|
||||||
$keys2 = $json->GetKeys("test", false);
|
|
||||||
$keys3 = $json->GetKeys();
|
|
||||||
|
|
||||||
В результате, `$key1` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB"
|
|
||||||
]
|
|
||||||
|
|
||||||
`$key2` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"subtest"
|
|
||||||
]
|
|
||||||
|
|
||||||
`$key3` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test",
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB",
|
|
||||||
"test1",
|
|
||||||
"test1/test",
|
|
||||||
"test2",
|
|
||||||
"test2/test",
|
|
||||||
"test3",
|
|
||||||
"test3/test",
|
|
||||||
"test3/test/res"
|
|
||||||
]
|
|
||||||
|
|
||||||
### Удаление ключей JSON
|
|
||||||
|
|
||||||
Для удаления ключей JSON есть 2 метода: `DeleteKey`, который удаляет только определённый ключ и `Clear`, который удаляет
|
|
||||||
**все ключи** из json-файла.
|
|
||||||
|
|
||||||
#### Метод `DeleteKey`
|
|
||||||
|
|
||||||
Это метод удаляет только определённый ключ в JSON. Он имеет **1 обязательный параметр** - `string $key` (ключ).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool` - результат удаления ключа: `true` - удаление прошло успешно, `false` - произошла ошибка
|
|
||||||
при удалении.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function DeleteKey (string $key): bool
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Получаемем ключи до удаления
|
|
||||||
$check1 = $json->GetKeys("test/subtest");
|
|
||||||
// Удаляем ключ
|
|
||||||
$this->DeleteKey("test/subtest/BBB");
|
|
||||||
// Получаемем ключи после удаления
|
|
||||||
$check2 = $json->GetKeys("test/subtest");
|
|
||||||
|
|
||||||
В результате, `$check1` будет
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB"
|
|
||||||
]
|
|
||||||
|
|
||||||
а `$check2`:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA"
|
|
||||||
]
|
|
||||||
|
|
||||||
#### Метод `Clear`
|
|
||||||
|
|
||||||
Это метод удаляет **все ключи** из json-файла. Он не имеет никаких параметров и ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Clear (): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Очищаем
|
|
||||||
$json->Clear();
|
|
||||||
// Получаем ключи
|
|
||||||
$keys = $json->GetKeys();
|
|
||||||
|
|
||||||
В результате, `$key` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
]
|
|
@ -1,46 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace goodboyalex\php_components_pack\operators;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Полезные операторы.
|
|
||||||
*
|
|
||||||
* @author Александр Бабаев
|
|
||||||
* @package php_components_pack
|
|
||||||
* @version 1.0
|
|
||||||
* @since 1.1.1
|
|
||||||
*/
|
|
||||||
final class Operators
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Проверяет, что значение <code>$value</code> равно одному из значений <code>$values</code>.
|
|
||||||
*
|
|
||||||
* @param mixed $value Искомое значение.
|
|
||||||
* @param mixed ...$values Массив значений.
|
|
||||||
*
|
|
||||||
* @return bool Возвращает <code>true</code>, если значение <code>$value</code> равно одному из значений
|
|
||||||
* <code>$values</code>, иначе <code>false</code>.
|
|
||||||
*/
|
|
||||||
public static function Is (mixed $value, mixed ...$values): bool
|
|
||||||
{
|
|
||||||
// Проверяем, что хотя бы одно из значений равно искомому и возвращаем результат
|
|
||||||
return array_any($values, fn ($curValue) => $curValue === $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Проверяет, сколько раз значение <code>$value</code> встречается в массиве <code>$values</code>.
|
|
||||||
*
|
|
||||||
* @param mixed $value Искомое значение.
|
|
||||||
* @param mixed ...$values Массив значений.
|
|
||||||
*
|
|
||||||
* @return int Возвращает количество значений <code>$values</code>, которые равны <code>$value</code>.
|
|
||||||
*/
|
|
||||||
public static function IsCount (mixed $value, mixed ...$values): int
|
|
||||||
{
|
|
||||||
// Получаем массив значений повторений
|
|
||||||
$result = array_count_values($values);
|
|
||||||
|
|
||||||
// Возвращаем результат
|
|
||||||
return $result[$value] ?? 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,119 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace goodboyalex\php_components_pack\types;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Тип-расширение для типа bool.
|
|
||||||
*
|
|
||||||
* @author Александр Бабаев
|
|
||||||
* @package php_components_pack
|
|
||||||
* @version 1.0
|
|
||||||
* @since 1.1.1
|
|
||||||
*/
|
|
||||||
final class BoolEx
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var int $False Значение "ложь".
|
|
||||||
*/
|
|
||||||
public const int False = -1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $Null Значение не установлено (и не истина, и не ложь).
|
|
||||||
*/
|
|
||||||
public const int Null = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $True Значение "истина".
|
|
||||||
*/
|
|
||||||
public const int True = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $Value Хранимое значение.
|
|
||||||
*/
|
|
||||||
private int $Value;
|
|
||||||
|
|
||||||
public function __construct (?bool $value = null)
|
|
||||||
{
|
|
||||||
// Присваиваем значение
|
|
||||||
$this->Value = $value === null ? self::Null : ($value ? self::True : self::False);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Преобразует значение в экземпляр типа.
|
|
||||||
*
|
|
||||||
* ВАЖНО: при преобразовании в тип будет использована следующая логика:
|
|
||||||
*
|
|
||||||
* - <code>'true'</code>, <code>'1'</code>, <code>'on'</code>, <code>'yes'</code>, <code>'y'</code>,
|
|
||||||
* <code>'t'</code>, <code>true</code>, <code>1</code>, <code>1.0</code> считаются как истина;
|
|
||||||
* - <code>'false'</code>, <code>'0'</code>, <code>'off'</code>, <code>'no'</code>, <code>'n'</code>,
|
|
||||||
* <code>'f'</code>, <code>false</code>, <code>-1</code>, <code>-1.0</code> считаются как ложь;
|
|
||||||
* - все остальные значения считаются как неустановленною (и не истина, и не ложь).
|
|
||||||
*
|
|
||||||
* @param mixed $value Значение.
|
|
||||||
*
|
|
||||||
* @return BoolEx Возвращает экземпляр типа.
|
|
||||||
*/
|
|
||||||
public static function Parse (mixed $value): BoolEx
|
|
||||||
{
|
|
||||||
// Преобразуем значение в тип
|
|
||||||
$value = match ($value) {
|
|
||||||
'true', '1', 'on', 'yes', 'y', 't', true, 1, 1.0 => self::True,
|
|
||||||
'false', '0', 'off', 'no', 'n', 'f', false, -1, -1.0 => self::False,
|
|
||||||
default => self::Null
|
|
||||||
};
|
|
||||||
|
|
||||||
// Создаем экземпляр типа
|
|
||||||
return new BoolEx($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Проверяет, является ли значение ложью.
|
|
||||||
*
|
|
||||||
* @return bool Возвращает, является ли значение ложью.
|
|
||||||
*/
|
|
||||||
public function IsFalse (): bool
|
|
||||||
{
|
|
||||||
return $this->Value === self::False;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Проверяет, является ли значение истиной.
|
|
||||||
*
|
|
||||||
* @return bool Возвращает, является ли значение истиной.
|
|
||||||
*/
|
|
||||||
public function IsTrue (): bool
|
|
||||||
{
|
|
||||||
return $this->Value === self::True;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Возвращает строковое представление значения.
|
|
||||||
*
|
|
||||||
* @return string Возвращает строковое представление значения.
|
|
||||||
*/
|
|
||||||
public function __toString (): string
|
|
||||||
{
|
|
||||||
// Преобразуем значение в строку
|
|
||||||
return match ($this->Value) {
|
|
||||||
self::True => "true",
|
|
||||||
self::False => "false",
|
|
||||||
self::Null => "null"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Конвертирует значение в bool.
|
|
||||||
*
|
|
||||||
* @param bool $onNull Значение, возвращаемое при неустановленном значении.
|
|
||||||
*
|
|
||||||
* @return bool Возвращает значение, конвертированное в bool.
|
|
||||||
*/
|
|
||||||
public function AsBool (bool $onNull = false): bool
|
|
||||||
{
|
|
||||||
return match ($this->Value) {
|
|
||||||
self::True => true,
|
|
||||||
self::False => false,
|
|
||||||
default => $onNull
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,710 +0,0 @@
|
|||||||
# Описание класса JsonReWriter
|
|
||||||
|
|
||||||
## Информация о версии
|
|
||||||
|
|
||||||
Версия класса: 1.0
|
|
||||||
|
|
||||||
Впервые введено в пакет с версии: 1.1.0
|
|
||||||
|
|
||||||
Описание класса: Класс для работы с JSON-файлами.
|
|
||||||
|
|
||||||
## Публичные свойства и константы класса
|
|
||||||
|
|
||||||
В классе определены следующие свойства:
|
|
||||||
|
|
||||||
- `string $JsonString` - строка JSON (чтение/запись).
|
|
||||||
|
|
||||||
## Быстрый старт
|
|
||||||
|
|
||||||
### Правила формирования ключей.
|
|
||||||
|
|
||||||
Ключ для чтения/записи данных класса формируется следующим образом: `ключ/подключ/подключ подключа` .
|
|
||||||
|
|
||||||
Например, если дан json-файл:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Пусть требуется получить значение `BBB`, тогда ключ должен быть `test/subtest/BBB`.
|
|
||||||
|
|
||||||
### Чтение.
|
|
||||||
|
|
||||||
1. Создайте элемент класса `$json = new JsonReWriter ();`
|
|
||||||
2. Если у вас требуется загрузить json из файла `$fileName`, то воспользуйтесь методом `LoadFromFile`:
|
|
||||||
`$json->LoadFromFile($fileName);`, если же json представлен строкой `$jsonStr`, то загрузите её в свойство
|
|
||||||
`$JsonString`: `$json->JsonString = $jsonStr;`
|
|
||||||
3. Далее можно пользоваться любым методом для чтения `Read*`, в том числе и общим `$json->Read(...)`.
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загшружаю данные из файла
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
// Получаю число
|
|
||||||
$float = $json->ReadFloat("test/subtest/BBB", 0.2);
|
|
||||||
|
|
||||||
В итоге в `$float` будет `1.23`.
|
|
||||||
|
|
||||||
### Запись.
|
|
||||||
|
|
||||||
1. Создайте элемент класса `$json = new JsonReWriter ();`
|
|
||||||
2. Далее можно пользоваться любым методом для записи `Write*`, в том числе и общим `$json->Write(...)`.
|
|
||||||
3. Если вам требуется создать json файл с именем `$fileName`, то воспользуйтесь методом `SaveToFile`:
|
|
||||||
`$json->SaveToFile($fileName);`, если же json должен быть представлен строкой `$jsonStr`, то загрузите её из свойства
|
|
||||||
`$JsonString`: `$jsonStr = $json->JsonString;`
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загшружаю данные из файла
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
// Получаю число
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/BBB", 0.2);
|
|
||||||
}
|
|
||||||
catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
В итоге в `test/subtest/BBB` вместо `1.23` будет `0.2`.
|
|
||||||
|
|
||||||
## Коды ошибок JsonErrorCode
|
|
||||||
|
|
||||||
Ниже представлена таблица основных кодов ошибки:
|
|
||||||
|
|
||||||
| Ошибка | Описание | Введено с версии |
|
|
||||||
|:-------------------:|:---------------------------------------------------------------------------:|:----------------:|
|
|
||||||
| Unknown | Неизвестная ошибка | 1.0 |
|
|
||||||
| None | Ошибок нет | 1.0 |
|
|
||||||
| Depth | Достигнута максимальная глубина стека | 1.0 |
|
|
||||||
| StateMismatch | Неверный или некорректный JSON | 1.0 |
|
|
||||||
| CTRLChar | Ошибка управляющего символа, возможно, неверная кодировка | 1.0 |
|
|
||||||
| Syntax | Синтаксическая ошибка | 1.0 |
|
|
||||||
| UTF8 | Некорректные для кодировки UTF-8 символы, возможно, неверная кодировка | 1.0 |
|
|
||||||
| Recursion | Одна или несколько зацикленных ссылок в кодируемом значении | 1.0 |
|
|
||||||
| InfOrNan | Одно или несколько значений NAN или INF в кодируемом значении | 1.0 |
|
|
||||||
| UnsupportedType | Передали значение с неподдерживаемым типом | 1.0 |
|
|
||||||
| InvalidPropertyName | Имя свойства не может быть закодировано | 1.0 |
|
|
||||||
| UTF16 | Некорректный для кодировки UTF-16 символ, возможно, некорректно закодирован | 1.0 |
|
|
||||||
| KeyIsNotArray | Ключ не содержит вложений, хотя от него требуется обратное | 1.0 |
|
|
||||||
| NotISerializable | Класс не реализует интерфейс ISerializable | 1.0 |
|
|
||||||
|
|
||||||
### Методы и функции перечисления JsonErrorCode
|
|
||||||
|
|
||||||
Перечисление содержит **статический метод** `static function FromLastError (): JsonErrorCode`, который получает код
|
|
||||||
ошибки из последней JSON ошибки.
|
|
||||||
|
|
||||||
Например, при успешной загрузке, можем проверить ошибки:
|
|
||||||
|
|
||||||
$errors = JsonErrorCode::FromLastError ();
|
|
||||||
|
|
||||||
После того, как мы выведем `$errors`, мы получим `JsonErrorCode::None`.
|
|
||||||
|
|
||||||
## Исключение JsonException
|
|
||||||
|
|
||||||
Исключение расширяет класс `Exception`, поэтому может выбрасываться через `throw`.
|
|
||||||
|
|
||||||
### Свойства
|
|
||||||
|
|
||||||
Исключение содержит следующие свойства:
|
|
||||||
|
|
||||||
- `?string $JsonString` - строка JSON (или null);
|
|
||||||
- `JsonErrorCode $ErrorCode` - код ошибки JSON;
|
|
||||||
- `?string $ErrorMessage` - сообщение об ошибке JSON (в отличие от функции json_last_error_msg(), данная переменная при
|
|
||||||
отсутствии ошибок выводит null, а не "No error").
|
|
||||||
|
|
||||||
### Методы и функции
|
|
||||||
|
|
||||||
#### Конструктор.
|
|
||||||
|
|
||||||
Конструктор принимает **3 необязательных параметра**:
|
|
||||||
|
|
||||||
* `?string $json` - строка JSON (по умолчанию, `null`);
|
|
||||||
* `JsonErrorCode $errorCode` - код ошибки (по умолчанию, `JsonErrorCode::Unknown`);
|
|
||||||
* `?string $errorMessage` - сообщение об ошибке (по умолчанию, `null`).
|
|
||||||
|
|
||||||
В результате создаётся новое исключение `JsonException`.
|
|
||||||
|
|
||||||
Пример:
|
|
||||||
|
|
||||||
throw new JsonException("{}", JsonErrorCode::Depth, "Пример");
|
|
||||||
|
|
||||||
Создаст исключение `JsonException`.
|
|
||||||
|
|
||||||
## Методы и функции
|
|
||||||
|
|
||||||
### Конструктор и деструктор.
|
|
||||||
|
|
||||||
Конструктор не принимает никаких параметров.
|
|
||||||
|
|
||||||
В результате создаётся новый класс `JsonReWriter`.
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Контсуктор
|
|
||||||
$json = new JsonReWriter ();
|
|
||||||
// Деструктор
|
|
||||||
unset($json);
|
|
||||||
|
|
||||||
Создаст и уничтожит класс `JsonReWriter`.
|
|
||||||
|
|
||||||
### Сохранение и загрузка из файла.
|
|
||||||
|
|
||||||
За сохранение и загрузку отвечают 2 метода: `SaveToFile` и `LoadFromFile`.
|
|
||||||
|
|
||||||
#### Сохранение в файл (метод `SaveToFile`)
|
|
||||||
|
|
||||||
Этот метод сохраняет содержимое JSON в файл. Он содержит **1 обязательный параметр**:
|
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
|
||||||
|
|
||||||
Метод возвращает `bool` - сохранены ли данные в файл: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function SaveToFile (string $fileName): bool
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Сохраняем созданный JSON файл
|
|
||||||
$json->SaveToFile($fileName);
|
|
||||||
|
|
||||||
Содержимое файла `test.json` представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#### Загрузка файла (метод `LoadFromFile`)
|
|
||||||
|
|
||||||
Этот метод загружает содержимое файла в класс. Он содержит **1 обязательный параметр**:
|
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
|
||||||
|
|
||||||
Метод возвращает `bool` - загружены ли данные из файла: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function LoadFromFile (string $fileName): bool
|
|
||||||
|
|
||||||
**Пример:**
|
|
||||||
Пусть дан файл `test.json`, содержимое которого представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Следующий код загрузит это содержимое в класс:
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загружаю данные
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
|
|
||||||
### Чтение данных
|
|
||||||
|
|
||||||
Для чтения данных используется один общий метод `Read` и 7 его производных метода: `ReadString`, `ReadInt`, `ReadFloat`,
|
|
||||||
`ReadBool`, `ReadArray`, `ReadObject` и `ReadSerializable`.
|
|
||||||
|
|
||||||
#### Метод `Read`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `mixed $default` (значение по умолчанию, задан по умолчанию в `null`).
|
|
||||||
|
|
||||||
Этот метод возвращает `mixed`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Read (string $key, mixed $default = null): mixed
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполняю данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->Write("test3/test/res", json_encode([1, 2, 3]));
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Получаю значение
|
|
||||||
$float = (float)$json->Read("test/subtest/BBB"));
|
|
||||||
|
|
||||||
В результате, переменная `$float` будет иметь значение `1.23`.
|
|
||||||
|
|
||||||
#### Метод `ReadString`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `string $default` (значение по умолчанию, задан по умолчанию в `""`).
|
|
||||||
|
|
||||||
Этот метод возвращает `string`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadString (string $key, string $default = ""): string
|
|
||||||
|
|
||||||
#### Метод `ReadInt`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `int $default` (значение по умолчанию, задан по умолчанию в `0`).
|
|
||||||
|
|
||||||
Этот метод возвращает `int`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadInt (string $key, int $default = 0): int
|
|
||||||
|
|
||||||
#### Метод `ReadFloat`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `float $default` (значение по умолчанию, задан по умолчанию в `0.0`).
|
|
||||||
|
|
||||||
Этот метод возвращает `float`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadFloat (string $key, float $default = 0.0): float
|
|
||||||
|
|
||||||
#### Метод `ReadBool`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `bool $default` (значение по умолчанию, задан по умолчанию в `false`).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadBool (string $key, bool $default = false): bool
|
|
||||||
|
|
||||||
#### Метод `ReadArray`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
|
||||||
необязательный параметр** `array $default` (значение по умолчанию, задан по умолчанию в `[]`).
|
|
||||||
|
|
||||||
Этот метод возвращает `array`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadArray (string $key, array $default = []): array
|
|
||||||
|
|
||||||
#### Метод `ReadObject`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `object $default` (значение по умолчанию).
|
|
||||||
|
|
||||||
Этот метод возвращает `object`: значение ключа JSON или значение по умолчанию.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadObject (string $key, object $default): object
|
|
||||||
|
|
||||||
#### Метод `ReadSerializable`
|
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `string $serializableClassName` (имя класса, реализующего интерфейс ISerializable, с namespace).
|
|
||||||
|
|
||||||
Этот метод возвращает класс, реализующий интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
**Важно!** Этот метод может выбросить исключение `JsonException`, если класс, заданный в `$serializableClassName` не
|
|
||||||
реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function ReadSerializable (string $key, string $serializableClassName): ISerializable
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
Пусть для примера, класс `Demo` из namespace `iam\namespace` реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
// Создаю класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// ... Здесь где-то загрузка данных
|
|
||||||
// Получаю класс
|
|
||||||
try {
|
|
||||||
/**
|
|
||||||
* @var Demo $unSerializableClass
|
|
||||||
*/
|
|
||||||
$unSerializableClass = $json->ReadSerializable("test", "iam\\namespace\\Demo");
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
В результате, переменная `$unSerializableClass` будет содержать данные класса `Demo`.
|
|
||||||
|
|
||||||
### Запись данных
|
|
||||||
|
|
||||||
Для чтения данных используется один общий метод `Write` и 3 его производных метода: `WriteArray`, `WriteObject` и
|
|
||||||
`WriteSerializable`.
|
|
||||||
|
|
||||||
**Важно!** Лобой из вышеуказанных методов может выбросить исключение `JsonException`, если ключ не содержит вложений,
|
|
||||||
хотя от него требуется обратное.
|
|
||||||
|
|
||||||
#### Метод `Write`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `mixed $value` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Write (string $key, mixed $value): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Сохраняем созданный JSON файл
|
|
||||||
$json->SaveToFile($fileName);
|
|
||||||
|
|
||||||
Содержимое файла `test.json` представлено далее:
|
|
||||||
|
|
||||||
{
|
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#### Метод `WriteArray`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `array $array` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteArray (string $key, array $array): void
|
|
||||||
|
|
||||||
#### Метод `WriteObject`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `object $value` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteObject (string $key, object $value): void
|
|
||||||
|
|
||||||
#### Метод `WriteSerializable`
|
|
||||||
|
|
||||||
Это метод, который записывает значение в ключ JSON. Он имеет **2 обязательных параметра**:
|
|
||||||
|
|
||||||
- `string $key` (ключ);
|
|
||||||
- `ISerializable $serializableValue` (записываемое значение).
|
|
||||||
|
|
||||||
Этот метод ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function WriteSerializable (string $key, ISerializable $serializableValue): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
Пусть для примера, класс `Demo` из namespace `iam\namespace` реализует интерфейс `ISerializable`.
|
|
||||||
|
|
||||||
// Имя файла
|
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Создаём класс Demo
|
|
||||||
$serializableClass = new Demo(...);
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->WriteSerializable("test", $serializableClass);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
...
|
|
||||||
|
|
||||||
### Работа с ключами JSON
|
|
||||||
|
|
||||||
Для работы с ключами JSON есть 2 метода: `IsKeyExists` и `GetKeys`.
|
|
||||||
|
|
||||||
#### Метод `IsKeyExists`
|
|
||||||
|
|
||||||
Это метод проверяем наличие ключа в JSON. Он имеет **1 обязательный параметр** - `string $key` (ключ).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool`: `true` если ключ найден и `false` в противном случае.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function IsKeyExists (string $key): bool
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Проверяем ключи
|
|
||||||
$check1 = $json->IsKeyExists("test/subtest/AAA");
|
|
||||||
$check2 = $json->IsKeyExists("test/subtest/ССС");
|
|
||||||
|
|
||||||
В результате, `$check1` будет `true`, а `$check2` - `false`.
|
|
||||||
|
|
||||||
#### Метод `GetKeys`
|
|
||||||
|
|
||||||
Это метод получает список ключей. Он имеет **2 необязательных параметра**:
|
|
||||||
|
|
||||||
- `string $parentKey` (ключ родителя (или "" (установлено по умолчанию) для всех);
|
|
||||||
- `bool $includeChildren` (нужно ли включать дочерние ключи (по умолчанию, да)).
|
|
||||||
|
|
||||||
Этот метод возвращает `array`: список ключей.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function GetKeys (string $parentKey = "", bool $includeChildren = true): array
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Получаем ключи
|
|
||||||
$keys1 = $json->GetKeys("test");
|
|
||||||
$keys2 = $json->GetKeys("test", false);
|
|
||||||
$keys3 = $json->GetKeys();
|
|
||||||
|
|
||||||
В результате, `$key1` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB"
|
|
||||||
]
|
|
||||||
|
|
||||||
`$key2` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"subtest"
|
|
||||||
]
|
|
||||||
|
|
||||||
`$key3` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test",
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB",
|
|
||||||
"test1",
|
|
||||||
"test1/test",
|
|
||||||
"test2",
|
|
||||||
"test2/test",
|
|
||||||
"test3",
|
|
||||||
"test3/test",
|
|
||||||
"test3/test/res"
|
|
||||||
]
|
|
||||||
|
|
||||||
### Удаление ключей JSON
|
|
||||||
|
|
||||||
Для удаления ключей JSON есть 2 метода: `DeleteKey`, который удаляет только определённый ключ и `Clear`, который удаляет
|
|
||||||
**все ключи** из json-файла.
|
|
||||||
|
|
||||||
#### Метод `DeleteKey`
|
|
||||||
|
|
||||||
Это метод удаляет только определённый ключ в JSON. Он имеет **1 обязательный параметр** - `string $key` (ключ).
|
|
||||||
|
|
||||||
Этот метод возвращает `bool` - результат удаления ключа: `true` - удаление прошло успешно, `false` - произошла ошибка
|
|
||||||
при удалении.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function DeleteKey (string $key): bool
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Получаемем ключи до удаления
|
|
||||||
$check1 = $json->GetKeys("test/subtest");
|
|
||||||
// Удаляем ключ
|
|
||||||
$this->DeleteKey("test/subtest/BBB");
|
|
||||||
// Получаемем ключи после удаления
|
|
||||||
$check2 = $json->GetKeys("test/subtest");
|
|
||||||
|
|
||||||
В результате, `$check1` будет
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA",
|
|
||||||
"test/subtest/BBB"
|
|
||||||
]
|
|
||||||
|
|
||||||
а `$check2`:
|
|
||||||
|
|
||||||
[
|
|
||||||
"test/subtest",
|
|
||||||
"test/subtest/AAA"
|
|
||||||
]
|
|
||||||
|
|
||||||
#### Метод `Clear`
|
|
||||||
|
|
||||||
Это метод удаляет **все ключи** из json-файла. Он не имеет никаких параметров и ничего не возвращает.
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public function Clear (): void
|
|
||||||
|
|
||||||
**Пример,**
|
|
||||||
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Заполним данными
|
|
||||||
try {
|
|
||||||
$json->Write("test/subtest/AAA", "123");
|
|
||||||
$json->Write("test/subtest/BBB", 1.23);
|
|
||||||
$json->Write("test1/test", 123);
|
|
||||||
$json->Write("test2/test", true);
|
|
||||||
$json->WriteArray("test3/test/res", [1, 2, 3]);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
// Очищаем
|
|
||||||
$json->Clear();
|
|
||||||
// Получаем ключи
|
|
||||||
$keys = $json->GetKeys();
|
|
||||||
|
|
||||||
В результате, `$key` будет следующим массивом:
|
|
||||||
|
|
||||||
[
|
|
||||||
]
|
|
Loading…
x
Reference in New Issue
Block a user