20250628
Бета 1.1
This commit is contained in:
parent
e9118609b6
commit
f5420ce2c0
86
composer.lock
generated
86
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "f5bf0ec4042cb12fb3a702cad65f099d",
|
"content-hash": "f5bf0ec4042cb12fb3a702cad65f099d",
|
||||||
"packages": [],
|
"packages": [],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
@ -69,16 +69,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v5.5.0",
|
"version": "v5.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
|
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||||
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
|
"reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -121,9 +121,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
|
||||||
},
|
},
|
||||||
"time": "2025-05-31T08:24:38+00:00"
|
"time": "2025-05-31T08:24:38+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
@ -245,16 +245,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
"version": "12.3.1",
|
"version": "12.3.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||||
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170"
|
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ddec29dfc128eba9c204389960f2063f3b7fa170",
|
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ddec29dfc128eba9c204389960f2063f3b7fa170",
|
||||||
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170",
|
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -310,7 +310,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
|
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.1"
|
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -330,7 +330,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-06-18T08:58:13+00:00"
|
"time": "2025-06-18T08:58:13+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-file-iterator",
|
"name": "phpunit/php-file-iterator",
|
||||||
@ -579,16 +579,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "12.2.3",
|
"version": "12.2.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1"
|
"reference": "b71849b29f7a8d7574e4401873cb8b539896613f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/60a8ea2d8b2f070000051b56778009e11576e7d1",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b71849b29f7a8d7574e4401873cb8b539896613f",
|
||||||
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1",
|
"reference": "b71849b29f7a8d7574e4401873cb8b539896613f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -602,15 +602,15 @@
|
|||||||
"phar-io/manifest": "^2.0.4",
|
"phar-io/manifest": "^2.0.4",
|
||||||
"phar-io/version": "^3.2.1",
|
"phar-io/version": "^3.2.1",
|
||||||
"php": ">=8.3",
|
"php": ">=8.3",
|
||||||
"phpunit/php-code-coverage": "^12.3.1",
|
"phpunit/php-code-coverage": "^12.3.1",
|
||||||
"phpunit/php-file-iterator": "^6.0.0",
|
"phpunit/php-file-iterator": "^6.0.0",
|
||||||
"phpunit/php-invoker": "^6.0.0",
|
"phpunit/php-invoker": "^6.0.0",
|
||||||
"phpunit/php-text-template": "^5.0.0",
|
"phpunit/php-text-template": "^5.0.0",
|
||||||
"phpunit/php-timer": "^8.0.0",
|
"phpunit/php-timer": "^8.0.0",
|
||||||
"sebastian/cli-parser": "^4.0.0",
|
"sebastian/cli-parser": "^4.0.0",
|
||||||
"sebastian/comparator": "^7.1.0",
|
"sebastian/comparator": "^7.1.0",
|
||||||
"sebastian/diff": "^7.0.0",
|
"sebastian/diff": "^7.0.0",
|
||||||
"sebastian/environment": "^8.0.2",
|
"sebastian/environment": "^8.0.2",
|
||||||
"sebastian/exporter": "^7.0.0",
|
"sebastian/exporter": "^7.0.0",
|
||||||
"sebastian/global-state": "^8.0.0",
|
"sebastian/global-state": "^8.0.0",
|
||||||
"sebastian/object-enumerator": "^7.0.0",
|
"sebastian/object-enumerator": "^7.0.0",
|
||||||
@ -624,7 +624,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "12.2-dev"
|
"dev-main": "12.2-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -656,7 +656,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.3"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -680,7 +680,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-06-20T11:33:06+00:00"
|
"time": "2025-06-27T04:37:55+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
@ -741,16 +741,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/comparator",
|
"name": "sebastian/comparator",
|
||||||
"version": "7.1.0",
|
"version": "7.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/comparator.git",
|
"url": "https://github.com/sebastianbergmann/comparator.git",
|
||||||
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f"
|
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/03d905327dccc0851c9a08d6a979dfc683826b6f",
|
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/03d905327dccc0851c9a08d6a979dfc683826b6f",
|
||||||
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f",
|
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -761,7 +761,7 @@
|
|||||||
"sebastian/exporter": "^7.0"
|
"sebastian/exporter": "^7.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^12.2"
|
"phpunit/phpunit": "^12.2"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-bcmath": "For comparing BcMath\\Number objects"
|
"ext-bcmath": "For comparing BcMath\\Number objects"
|
||||||
@ -769,7 +769,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "7.1-dev"
|
"dev-main": "7.1-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -809,27 +809,27 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/comparator/issues",
|
"issues": "https://github.com/sebastianbergmann/comparator/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
|
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/comparator/tree/7.1.0"
|
"source": "https://github.com/sebastianbergmann/comparator/tree/7.1.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"url": "https://github.com/sebastianbergmann",
|
"url": "https://github.com/sebastianbergmann",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://liberapay.com/sebastianbergmann",
|
"url": "https://liberapay.com/sebastianbergmann",
|
||||||
"type": "liberapay"
|
"type": "liberapay"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://thanks.dev/u/gh/sebastianbergmann",
|
"url": "https://thanks.dev/u/gh/sebastianbergmann",
|
||||||
"type": "thanks_dev"
|
"type": "thanks_dev"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
|
"url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-06-17T07:41:58+00:00"
|
"time": "2025-06-17T07:41:58+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/complexity",
|
"name": "sebastian/complexity",
|
||||||
@ -1633,4 +1633,4 @@
|
|||||||
},
|
},
|
||||||
"platform-dev": {},
|
"platform-dev": {},
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.6.0"
|
||||||
}
|
}
|
||||||
|
163
sources/classes/JsonReWriter.php
Normal file
163
sources/classes/JsonReWriter.php
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\classes;
|
||||||
|
|
||||||
|
use goodboyalex\php_components_pack\exceptions\JsonException;
|
||||||
|
use goodboyalex\php_components_pack\traits\JsonReWriter\JsonReWriterReadTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс для работы с JSON-файлами.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
final class JsonReWriter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array $JsonData Массив данных.
|
||||||
|
*/
|
||||||
|
public array $JsonData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор класса.
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
$this->JsonData = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Деструктор класса.
|
||||||
|
*/
|
||||||
|
public function __destruct ()
|
||||||
|
{
|
||||||
|
unset($this->JsonData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сохраняем JSON в файл.
|
||||||
|
*
|
||||||
|
* @param string $fileName Имя файла.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws JsonException Если файл не может быть сохранен.
|
||||||
|
*/
|
||||||
|
public function SaveToFile (string $fileName): void
|
||||||
|
{
|
||||||
|
// Запись данных в файл
|
||||||
|
file_put_contents($fileName, json_encode($this->JsonData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
|
||||||
|
|
||||||
|
// Проверка на ошибки
|
||||||
|
if (json_last_error() !== JSON_ERROR_NONE)
|
||||||
|
// - если есть ошибки, выбрасываем исключение
|
||||||
|
throw new JsonException($fileName, json_last_error(), json_last_error_msg());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Загрузка данных из JSON-файла.
|
||||||
|
*
|
||||||
|
* @param string $fileName Имя файла.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws JsonException Если файл не существует или содержит ошибки.
|
||||||
|
*/
|
||||||
|
public function LoadFromFile (string $fileName): void
|
||||||
|
{
|
||||||
|
// Проверка существования файла
|
||||||
|
if (!is_file($fileName))
|
||||||
|
// - нет? Выбрасываем исключение
|
||||||
|
throw new JsonException($fileName, -1, "File does not exist / Файл не существует");
|
||||||
|
|
||||||
|
// Чтение содержимого файла и преобразование JSON в объект
|
||||||
|
$this->JsonData = json_decode(file_get_contents($fileName), true);
|
||||||
|
|
||||||
|
// Проверка на ошибки
|
||||||
|
if ($this->JsonData === null && json_last_error() !== JSON_ERROR_NONE)
|
||||||
|
// - если есть ошибки, выбрасываем исключение
|
||||||
|
throw new JsonException($fileName, json_last_error(), json_last_error_msg());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяем наличие ключа в JSON.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ.
|
||||||
|
*
|
||||||
|
* @return bool true если ключ найден, false если нет.
|
||||||
|
*/
|
||||||
|
public function IsKeyExists (string $key): bool
|
||||||
|
{
|
||||||
|
// Получаем массив ключей по вложенности
|
||||||
|
$keys = $this->ParseKey($key);
|
||||||
|
|
||||||
|
// Получаем текущий массив данных
|
||||||
|
$current = $this->JsonData;
|
||||||
|
|
||||||
|
// Для каждого ключа
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
// - проверяем наличие ключа в текущем массиве
|
||||||
|
if (!array_key_exists($key, $current))
|
||||||
|
// - нет? Возвращаем false
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Переходим ко вложенному массиву
|
||||||
|
$current = $current[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Возвращаем true, если все ключи найдены
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Получение ключей по вложенности. Т.е., ключи вида <code>"key1/key2/key3" => ["key1", "key2", "key3"]</code>.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ.
|
||||||
|
*
|
||||||
|
* @return array Ключи по вложенности.
|
||||||
|
*/
|
||||||
|
private function ParseKey (string $key): array
|
||||||
|
{
|
||||||
|
return explode('/', $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Создание ключа в JSON.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ.
|
||||||
|
* @param mixed $value Значение.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws JsonException Если ключ не является массивом.
|
||||||
|
*/
|
||||||
|
private function CreateKey (string $key, mixed $value): void
|
||||||
|
{
|
||||||
|
// Получаем массив ключей по вложенности
|
||||||
|
$keys = $this->ParseKey($key);
|
||||||
|
|
||||||
|
// Получаем текущий массив данных
|
||||||
|
$current = &$this->JsonData;
|
||||||
|
|
||||||
|
// Для каждого ключа до предпоследнего
|
||||||
|
for ($i = 0; $i < count($keys) - 1; $i++) {
|
||||||
|
// - проверяем наличие ключа в текущем массиве
|
||||||
|
if (!isset($current[$keys[$i]]))
|
||||||
|
// - нет? Создаем ключ (массив)
|
||||||
|
$current[$keys[$i]] = [];
|
||||||
|
|
||||||
|
// - проверяем, что ключ является массивом
|
||||||
|
if (!is_array($current[$keys[$i]]))
|
||||||
|
// - нет? Выбрасываем исключение
|
||||||
|
throw new JsonException(null, -1, "Key is not an array / Ключ не является массивом!");
|
||||||
|
|
||||||
|
// - переходим ко вложенному массиву
|
||||||
|
$current = &$current[$keys[$i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создаем ключ (значение)
|
||||||
|
$current[$keys[count($keys) - 1]] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Подключаем методы чтения JSON
|
||||||
|
use JsonReWriterReadTrait;
|
||||||
|
}
|
67
sources/exceptions/JsonException.php
Normal file
67
sources/exceptions/JsonException.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ошибка работы с JSON.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
final class JsonException extends Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string|null $JsonFileName Имя файла JSON.
|
||||||
|
*/
|
||||||
|
public ?string $JsonFileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @link https://www.php.net/manual/ru/function.json-last-error.php
|
||||||
|
* @var int $JsonErrorCode Код ошибки JSON.
|
||||||
|
*/
|
||||||
|
public int $JsonErrorCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @link https://www.php.net/manual/ru/function.json-last-error-msg.php
|
||||||
|
* @var string|null $JsonErrorMessage Сообщение об ошибке JSON.
|
||||||
|
*
|
||||||
|
* Внимание! В отличие от функции json_last_error_msg(), данная переменная при отсутствии ошибок выводит null, а не
|
||||||
|
* "No error".
|
||||||
|
*/
|
||||||
|
public ?string $JsonErrorMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param string|null $fileName Имя файла JSON.
|
||||||
|
* @param int $errorCode Код ошибки JSON.
|
||||||
|
* @param string|null $errorMessage Сообщение об ошибке JSON.
|
||||||
|
*/
|
||||||
|
public function __construct (?string $fileName = null, int $errorCode = JSON_ERROR_NONE,
|
||||||
|
?string $errorMessage = null)
|
||||||
|
{
|
||||||
|
// Если код ошибки JSON равен 0
|
||||||
|
if ($errorMessage === "No error")
|
||||||
|
// - то присваиваем ему null для совместимости
|
||||||
|
$errorMessage = null;
|
||||||
|
|
||||||
|
// Сохраняем сообщение об ошибке
|
||||||
|
$this->JsonErrorMessage = $errorMessage;
|
||||||
|
|
||||||
|
// Если сообщение пусто, то присваиваем ему "" для совместимости
|
||||||
|
$errorMessage = $errorMessage ?? "";
|
||||||
|
|
||||||
|
// Запускаем базовый конструктор
|
||||||
|
parent::__construct($errorMessage);
|
||||||
|
|
||||||
|
// Присваиваем имя файла
|
||||||
|
$this->JsonFileName = $fileName;
|
||||||
|
|
||||||
|
// Присваиваем код ошибки
|
||||||
|
$this->JsonErrorCode = $errorCode;
|
||||||
|
}
|
||||||
|
}
|
119
sources/traits/JsonReWriter/JsonReWriterReadTrait.php
Normal file
119
sources/traits/JsonReWriter/JsonReWriterReadTrait.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\traits\JsonReWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Часть кода класса JsonReWriter, отвечающая за методы чтения ключей и значений JSON.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.1.0
|
||||||
|
*/
|
||||||
|
trait JsonReWriterReadTrait
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как целое число.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param int $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return int Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadInt (string $key, int $default = 0): int
|
||||||
|
{
|
||||||
|
return (int)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param mixed $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return mixed Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function Read (string $key, mixed $default = null): mixed
|
||||||
|
{
|
||||||
|
if (!$this->IsKeyExists($key))
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$keys = $this->ParseKey($key);
|
||||||
|
|
||||||
|
// Получаем текущий массив данных
|
||||||
|
$current = $this->JsonData;
|
||||||
|
|
||||||
|
// Для каждого ключа до предпоследнего
|
||||||
|
for ($i = 0; $i < count($keys) - 1; $i++)
|
||||||
|
// - переходим ко вложенному массиву
|
||||||
|
$current = &$current[$keys[$i]];
|
||||||
|
|
||||||
|
// Возвращаем значение последнего ключа и если его нет, то возвращаем значение по умолчанию
|
||||||
|
return $current[$keys[count($keys) - 1]] ?? $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как вещественное число.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param float $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return float Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadFloat (string $key, float $default = 0.0): float
|
||||||
|
{
|
||||||
|
return (float)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как логическое значение.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param bool $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return bool Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadBool (string $key, bool $default = false): bool
|
||||||
|
{
|
||||||
|
return (bool)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как массив.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param array $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return array Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadArray (string $key, array $default = []): array
|
||||||
|
{
|
||||||
|
return (array)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как объект.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param object $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return object Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadObject (string $key, object $default): object
|
||||||
|
{
|
||||||
|
return (object)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Читает значение ключа JSON как строку.
|
||||||
|
*
|
||||||
|
* @param string $key Ключ JSON.
|
||||||
|
* @param string $default Значение по умолчанию.
|
||||||
|
*
|
||||||
|
* @return string Значение ключа JSON или значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function ReadString (string $key, string $default = ""): string
|
||||||
|
{
|
||||||
|
return (string)$this->Read($key, $default);
|
||||||
|
}
|
||||||
|
}
|
32
tests/classes/JsonReWriterTest.php
Normal file
32
tests/classes/JsonReWriterTest.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\tests\classes;
|
||||||
|
|
||||||
|
use goodboyalex\php_components_pack\classes\JsonReWriter;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class JsonReWriterTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testSaveToFile ()
|
||||||
|
{
|
||||||
|
$this->PrepareForTest();
|
||||||
|
|
||||||
|
$json = new JsonReWriter();
|
||||||
|
$json->CreateKey("test/subtest/AAA", "123");
|
||||||
|
|
||||||
|
var_dump($json->JsonData);
|
||||||
|
|
||||||
|
//$json->SaveToFile(__DIR__ . '/test.json');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function PrepareForTest (): void
|
||||||
|
{
|
||||||
|
require_once __DIR__ . '/../../sources/exceptions/JsonException.php';
|
||||||
|
require_once __DIR__ . '/../../sources/classes/JsonReWriter.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLoadFromFile ()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user