Compare commits
No commits in common. "main" and "v1.0.27" have entirely different histories.
84
composer.lock
generated
84
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.5",
|
"version": "12.2.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "b71849b29f7a8d7574e4401873cb8b539896613f"
|
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b71849b29f7a8d7574e4401873cb8b539896613f",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/60a8ea2d8b2f070000051b56778009e11576e7d1",
|
||||||
"reference": "b71849b29f7a8d7574e4401873cb8b539896613f",
|
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1",
|
||||||
"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.5"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -680,7 +680,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-06-27T04:37:55+00:00"
|
"time": "2025-06-20T11:33:06+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",
|
||||||
|
@ -1,163 +0,0 @@
|
|||||||
<?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;
|
|
||||||
}
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Информация о версии
|
## Информация о версии
|
||||||
|
|
||||||
Версия класса: 1.2
|
Версия класса: 1.1
|
||||||
|
|
||||||
Впервые введено в пакет с версии: 1.0.24
|
Впервые введено в пакет с версии: 1.0.24
|
||||||
Последнее обновление в версии: 1.0.27
|
Последнее обновление в версии: 1.0.27
|
||||||
@ -371,49 +371,3 @@
|
|||||||
В результате на экране появится:
|
В результате на экране появится:
|
||||||
|
|
||||||
false|true|false
|
false|true|false
|
||||||
|
|
||||||
#### Метод `MinVersion`
|
|
||||||
|
|
||||||
Введено в версии `1.0.28`.
|
|
||||||
|
|
||||||
Этот **статический** метод **без параметров** возвращает минимальную версию (объект класса `VersionInfo`).
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public static function MinVersion (): VersionInfo
|
|
||||||
|
|
||||||
Пример,
|
|
||||||
|
|
||||||
// Создаю объекты
|
|
||||||
$version = VersionInfo::MinVersion();
|
|
||||||
|
|
||||||
// Вывожу
|
|
||||||
echo $version;
|
|
||||||
|
|
||||||
В результате на экране появится:
|
|
||||||
|
|
||||||
0.0.0.0 PreAlpha 0
|
|
||||||
|
|
||||||
#### Метод `MaxVersion`
|
|
||||||
|
|
||||||
Введено в версии `1.0.28`.
|
|
||||||
|
|
||||||
Этот **статический** метод **без параметров** возвращает максимальную версию (объект класса `VersionInfo`).
|
|
||||||
|
|
||||||
Синтаксис:
|
|
||||||
|
|
||||||
public static function MaxVersion (): VersionInfo
|
|
||||||
|
|
||||||
Пример,
|
|
||||||
|
|
||||||
// Создаю объекты
|
|
||||||
$version = VersionInfo::MaxVersion();
|
|
||||||
|
|
||||||
// В этом примере считается, что константа PHP_INT_MAX равна 9223372036854775807
|
|
||||||
|
|
||||||
// Вывожу
|
|
||||||
echo $version;
|
|
||||||
|
|
||||||
В результате на экране появится:
|
|
||||||
|
|
||||||
9223372036854775807.9223372036854775807.9223372036854775807.9223372036854775807
|
|
@ -11,7 +11,7 @@ use goodboyalex\php_components_pack\extensions\StringExtension;
|
|||||||
*
|
*
|
||||||
* @author Александр Бабаев
|
* @author Александр Бабаев
|
||||||
* @package php_components_pack
|
* @package php_components_pack
|
||||||
* @version 1.2
|
* @version 1.1
|
||||||
* @since 1.0.24
|
* @since 1.0.24
|
||||||
*/
|
*/
|
||||||
final class VersionInfo
|
final class VersionInfo
|
||||||
@ -306,7 +306,6 @@ final class VersionInfo
|
|||||||
* @return int Возвращает 1, если текущая версия старше интервала, 0, если находится в интервале, -1, если текущая
|
* @return int Возвращает 1, если текущая версия старше интервала, 0, если находится в интервале, -1, если текущая
|
||||||
* версия младше интервала.
|
* версия младше интервала.
|
||||||
*
|
*
|
||||||
* @version 1.1
|
|
||||||
* @since 1.0.27
|
* @since 1.0.27
|
||||||
*/
|
*/
|
||||||
public function CompareWithRange (?VersionInfo $left = null, ?VersionInfo $right = null,
|
public function CompareWithRange (?VersionInfo $left = null, ?VersionInfo $right = null,
|
||||||
@ -318,11 +317,17 @@ final class VersionInfo
|
|||||||
VersionCompareRangeOption::RightBorderIncluded
|
VersionCompareRangeOption::RightBorderIncluded
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Минимальная версия (случай, когда левая граница не указана)
|
||||||
|
$minVersion = new VersionInfo(0, 0, 0, 0, VersionInfoStage::PreAlpha, 0);
|
||||||
|
|
||||||
|
// Максимальная версия (случай, когда правая граница не указана)
|
||||||
|
$maxVersion = new VersionInfo(PHP_INT_MAX, PHP_INT_MAX, PHP_INT_MAX, PHP_INT_MAX, VersionInfoStage::Stable);
|
||||||
|
|
||||||
// Устанавливаем левую границу
|
// Устанавливаем левую границу
|
||||||
$leftBorder = $left ?? self::MinVersion();
|
$leftBorder = $left ?? $minVersion;
|
||||||
|
|
||||||
// Устанавливаем правую границу
|
// Устанавливаем правую границу
|
||||||
$rightBorder = $right ?? self::MaxVersion();
|
$rightBorder = $right ?? $maxVersion;
|
||||||
|
|
||||||
// Проверяем, что границы не перепутаны
|
// Проверяем, что границы не перепутаны
|
||||||
if ($leftBorder->CompareWith($rightBorder) == 0)
|
if ($leftBorder->CompareWith($rightBorder) == 0)
|
||||||
@ -364,28 +369,4 @@ final class VersionInfo
|
|||||||
// -- в противном случае, версия старше правой границы (или равна ей при не включении границы)
|
// -- в противном случае, версия старше правой границы (или равна ей при не включении границы)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Возвращает минимальную версию.
|
|
||||||
*
|
|
||||||
* @return VersionInfo Минимальная версия.
|
|
||||||
*
|
|
||||||
* @since 1.0.28
|
|
||||||
*/
|
|
||||||
public static function MinVersion (): VersionInfo
|
|
||||||
{
|
|
||||||
return new VersionInfo(0, 0, 0, 0, VersionInfoStage::PreAlpha, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Возвращает максимальную версию.
|
|
||||||
*
|
|
||||||
* @return VersionInfo Максимальная версия.
|
|
||||||
*
|
|
||||||
* @since 1.0.28
|
|
||||||
*/
|
|
||||||
public static function MaxVersion (): VersionInfo
|
|
||||||
{
|
|
||||||
return new VersionInfo(PHP_INT_MAX, PHP_INT_MAX, PHP_INT_MAX, PHP_INT_MAX, VersionInfoStage::Stable);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,67 +0,0 @@
|
|||||||
<?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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,119 +0,0 @@
|
|||||||
<?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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<?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