20250707
Бета 1.1.1
This commit is contained in:
		
							
								
								
									
										710
									
								
								sources/operators/JsonReWriter.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										710
									
								
								sources/operators/JsonReWriter.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,710 @@ | ||||
| # Описание класса 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` будет следующим массивом: | ||||
|  | ||||
|     [ | ||||
|     ] | ||||
							
								
								
									
										46
									
								
								sources/operators/Operators.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								sources/operators/Operators.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <?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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										119
									
								
								sources/types/BoolEx.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								sources/types/BoolEx.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| <?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 | ||||
|         }; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										710
									
								
								sources/types/JsonReWriter.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										710
									
								
								sources/types/JsonReWriter.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,710 @@ | ||||
| # Описание класса 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` будет следующим массивом: | ||||
|  | ||||
|     [ | ||||
|     ] | ||||
| @@ -3,7 +3,7 @@ | ||||
| namespace goodboyalex\php_components_pack\tests\classes; | ||||
|  | ||||
| use goodboyalex\php_components_pack\classes\File; | ||||
| use goodboyalex\php_components_pack\classes\JsonReWriter; | ||||
| use goodboyalex\php_components_pack\classes\BoolEx; | ||||
| use goodboyalex\php_components_pack\exceptions\JsonException; | ||||
| use goodboyalex\php_components_pack\tests\data\A; | ||||
| use goodboyalex\php_components_pack\tests\data\C; | ||||
| @@ -15,7 +15,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
|         } | ||||
| @@ -43,7 +43,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/test", 123); | ||||
|         } | ||||
| @@ -58,7 +58,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/test1", false); | ||||
|             $json->Write("test/test2", true); | ||||
| @@ -75,7 +75,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/test", "test string"); | ||||
|         } | ||||
| @@ -95,7 +95,7 @@ class JsonReWriterTest extends TestCase | ||||
|         if (file_exists($fileName)) | ||||
|             unlink($fileName); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
| @@ -123,7 +123,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
| @@ -143,7 +143,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
| @@ -165,7 +165,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         $class = new A("test", 123, true); | ||||
|  | ||||
| @@ -188,7 +188,7 @@ class JsonReWriterTest extends TestCase | ||||
|         if (file_exists($fileName)) | ||||
|             unlink($fileName); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
| @@ -205,7 +205,7 @@ class JsonReWriterTest extends TestCase | ||||
|  | ||||
|         unset($json); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         $json->LoadFromFile($fileName); | ||||
|  | ||||
| @@ -218,7 +218,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|  | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
| @@ -240,7 +240,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
|             $json->Write("test/subtest/BBB", 1.23); | ||||
| @@ -261,7 +261,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test/subtest/AAA", "123"); | ||||
|             $json->Write("test/subtest/BBB", 1.23); | ||||
| @@ -283,7 +283,7 @@ class JsonReWriterTest extends TestCase | ||||
|  | ||||
|         $serializableClass = new C("test", 123, true); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->WriteSerializable("test", $serializableClass); | ||||
|  | ||||
| @@ -306,7 +306,7 @@ class JsonReWriterTest extends TestCase | ||||
|     { | ||||
|         $this->PrepareForTest(); | ||||
|  | ||||
|         $json = new JsonReWriter(); | ||||
|         $json = new BoolEx(); | ||||
|         try { | ||||
|             $json->Write("test", 1.23); | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user