20250723 1.2 Бета 2

This commit is contained in:
Александр Бабаев 2025-07-23 17:18:28 +03:00
parent 04f6849ff4
commit f8f14244d0
3 changed files with 197 additions and 134 deletions

View File

@ -19,12 +19,6 @@
* `IHashable`,
* `JsonSerializable`.
## Публичные свойства и константы класса
В классе определены следующие свойства и константы:
- `const GUID EMPTY` - константа для пустого GUID.
## Методы и функции
### Конструктор и деструктор.
@ -44,153 +38,120 @@
Создаст и уничтожит класс `GUID`.
### Сохранение и загрузка из файла.
### Перевод в строку.
За сохранение и загрузку отвечают 2 метода: `SaveToFile` и `LoadFromFile`.
За перевод в строку отвечают 2 метода: «магический метод» `__toString` и `ToString`.
#### Сохранение в файл (метод `SaveToFile`)
#### «Магический метод» `__toString`
Этот метод сохраняет содержимое JSON в файл. Он содержит **1 обязательный параметр**:
Этот метод переводит GUID в строку. Он не содержит параметров.
* `string $fileName` - имя файла на диске.
Метод возвращает `bool` - сохранены ли данные в файл: `true` - да, `false` - нет.
Метод возвращает `string` - строковое представление GUID.
Синтаксис:
public function SaveToFile (string $fileName): bool
public function __toString (): string
**Пример:**
// Имя файла
$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);
// Создаю пустой GUID
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
// Вывожу его
echo $guid;
Содержимое файла `test.json` представлено далее:
В результате, на экране появится:
{
"test": {
"subtest": {
"AAA": "123",
"BBB": 1.23
}
},
"test1": {
"test": 123
},
"test2": {
"test": true
},
"test3": {
"test": {
"res": "[1,2,3]"
}
}
}
00000000-0000-0000-0000-000000000000
#### Загрузка файла (метод `LoadFromFile`)
#### Метод `ToString`
Этот метод загружает содержимое файла в класс. Он содержит **1 обязательный параметр**:
* `string $fileName` - имя файла на диске.
Метод возвращает `bool` - загружены ли данные из файла: `true` - да, `false` - нет.
Этот метод полностью аналогичен методу `__toString`.
Синтаксис:
public function LoadFromFile (string $fileName): bool
public function ToString (): string
**Пример:**
Пусть дан файл `test.json`, содержимое которого представлено далее:
{
"test": {
"subtest": {
"AAA": "123",
"BBB": 1.23
}
},
"test1": {
"test": 123
},
"test2": {
"test": true
},
"test3": {
"test": {
"res": "[1,2,3]"
}
}
}
// Создаю пустой GUID
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
// Вывожу его
echo $guid->ToString();
Следующий код загрузит это содержимое в класс:
В результате, на экране появится:
// Имя файла
$fileName = __DIR__ . "/test.json";
// Создаём класс
$json = new JsonReWriter();
// Загружаю данные
$json->LoadFromFile($fileName);
00000000-0000-0000-0000-000000000000
### Чтение данных
### Работа с массивом байтов
Для чтения данных используется один общий метод `Read` и 7 его производных метода: `ReadString`, `ReadInt`, `ReadFloat`,
`ReadBool`, `ReadArray`, `ReadObject` и `ReadSerializable`.
Для преобразования GUID в массив байтов и обратно используется 2 метода: `ToBytes` и `FromBytes`.
#### Метод `Read`
#### Метод `ToBytes`
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
необязательный параметр** `mixed $default` (значение по умолчанию, задан по умолчанию в `null`).
Это метод переводит GUID в массив байтов. Он не имеет никаких параметров.
Этот метод возвращает `mixed`: значение ключа JSON или значение по умолчанию.
Этот метод возвращает `array`: массив байтов, полученный из GUID.
Синтаксис:
public function Read (string $key, mixed $default = null): mixed
public function ToBytes (): 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->Write("test3/test/res", json_encode([1, 2, 3]));
} catch (JsonException $e) {
echo $e->getMessage();
// Создаю пустой GUID
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
// Вывожу его значение в строку
$r = var_export($guid->ToBytes());
// И вывожу их
echo $r;
В результате, на экране появится:
array(16) {
[1] => int(0)
[2] => int(0)
[3] => int(0)
[4] => int(0)
[5] => int(0)
[6] => int(0)
[7] => int(0)
[8] => int(0)
[9] => int(0)
[10] => int(0)
[11] => int(0)
[12] => int(0)
[13] => int(0)
[14] => int(0)
[15] => int(0)
[16] => int(0)
}
// Получаю значение
$float = (float)$json->Read("test/subtest/BBB"));
#### Метод `FromBytes`
В результате, переменная `$float` будет иметь значение `1.23`.
Это статический метод, который переводит массив байтов, заданный в параметре `array $bytes` в класс GUID.
#### Метод `ReadString`
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
необязательный параметр** `string $default` (значение по умолчанию, задан по умолчанию в `""`).
Этот метод возвращает `string`: значение ключа JSON или значение по умолчанию.
Этот метод возвращает экземпляр класса `GUID`: значение массива байт в GUID.
Синтаксис:
public function ReadString (string $key, string $default = ""): string
public static function FromBytes (array $bytes): GUID
**Пример,**
// Создаю массив
$array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// Конвертирую
$guid = GUID::FromBytes($array);
// И вывожу его
echo $guid;
В результате, на экране появится:
00000000-0000-0000-0000-000000000000
#### Метод `ReadInt`

View File

@ -26,12 +26,6 @@ use Throwable;
if (!defined('GUID_EMPTY_STRING'))
define('GUID_EMPTY_STRING', '00000000-0000-0000-0000-000000000000');
/**
* Определение константы для пустого GUID.
*/
if (!defined('GUID_EMPTY'))
define('GUID_EMPTY', new GUID(GUID_EMPTY_STRING));
/**
* Класс GUID предназначен для работы с уникальными идентификаторами формата UUID/GUID.
*
@ -42,11 +36,6 @@ if (!defined('GUID_EMPTY'))
*/
final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable, IHashable, JsonSerializable
{
/**
* Константа для пустого GUID.
*/
public const GUID EMPTY = GUID_EMPTY;
/**
* @var string $Value Внутреннее свойство для хранения значения GUID.
*/
@ -72,6 +61,16 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
$this->Value = $value;
}
/**
* Возвращает пустой GUID.
*
* @return GUID Пустой GUID.
*/
public static function Empty (): GUID
{
return new GUID();
}
// Подключаем трейт реализующий интерфейс ISerializable
use GUIDSerializeTrait;
@ -209,16 +208,6 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
: new GUID($guidString);
}
/**
* Преобразует объект GUID в строку.
*
* @return string Строковое представление GUID.
*/
public function __toString (): string
{
return $this->Value;
}
/**
* Возвращает сегмент GUID по его номеру.
*
@ -264,6 +253,16 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
* @return string Строковое представление GUID.
*/
public function ToString (): string
{
return $this->__toString();
}
/**
* Преобразует объект GUID в строку.
*
* @return string Строковое представление GUID.
*/
public function __toString (): string
{
return $this->Value;
}

103
tests/types/GUIDTest.php Normal file
View File

@ -0,0 +1,103 @@
<?php
namespace goodboyalex\php_components_pack\tests\types;
use goodboyalex\php_components_pack\types\GUID;
use PHPUnit\Framework\TestCase;
class GUIDTest extends TestCase
{
public function test__construct ()
{
$this->PrepareForTest();
$guid = new GUID();
$this->assertEquals(GUID::Empty(), $guid->ToString());
}
private function PrepareForTest (): void
{
require_once __DIR__ . '/../../sources/interfaces/ISerializable.php';
require_once __DIR__ . '/../../sources/interfaces/IArrayable.php';
require_once __DIR__ . '/../../sources/interfaces/IComparable.php';
require_once __DIR__ . '/../../sources/interfaces/IHashable.php';
require_once __DIR__ . '/../../sources/interfaces/IDuplicated.php';
require_once __DIR__ . '/../../sources/types/GUID.php';
}
public function testSegment ()
{
}
public function testToString ()
{
}
public function testIsInvalidOrEmpty ()
{
}
public function testParse ()
{
}
public function test__toString ()
{
}
public function testToBytes ()
{
$this->PrepareForTest();
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
$bytes = $guid->ToBytes();
$this->assertCount(16, $bytes);
$this->assertEquals(0, $bytes[0]);
$this->assertEquals(0, $bytes[1]);
$this->assertEquals(0, $bytes[2]);
$this->assertEquals(0, $bytes[3]);
$this->assertEquals(0, $bytes[4]);
$this->assertEquals(0, $bytes[5]);
$this->assertEquals(0, $bytes[6]);
$this->assertEquals(0, $bytes[7]);
$this->assertEquals(0, $bytes[8]);
$this->assertEquals(0, $bytes[9]);
$this->assertEquals(0, $bytes[10]);
$this->assertEquals(0, $bytes[11]);
$this->assertEquals(0, $bytes[12]);
$this->assertEquals(0, $bytes[13]);
$this->assertEquals(0, $bytes[14]);
$this->assertEquals(0, $bytes[15]);
}
public function testGenerate ()
{
}
public function testFromBytes ()
{
// Создаю массив
$array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// Конвертирую
$guid = GUID::FromBytes($array);
// И вывожу его
self::assertEquals('00000000-0000-0000-0000-000000000000', $guid->ToString());
}
public function testValidate ()
{
}
}