20250723 1.2 Бета 2
This commit is contained in:
parent
04f6849ff4
commit
f8f14244d0
@ -19,12 +19,6 @@
|
|||||||
* `IHashable`,
|
* `IHashable`,
|
||||||
* `JsonSerializable`.
|
* `JsonSerializable`.
|
||||||
|
|
||||||
## Публичные свойства и константы класса
|
|
||||||
|
|
||||||
В классе определены следующие свойства и константы:
|
|
||||||
|
|
||||||
- `const GUID EMPTY` - константа для пустого GUID.
|
|
||||||
|
|
||||||
## Методы и функции
|
## Методы и функции
|
||||||
|
|
||||||
### Конструктор и деструктор.
|
### Конструктор и деструктор.
|
||||||
@ -44,153 +38,120 @@
|
|||||||
|
|
||||||
Создаст и уничтожит класс `GUID`.
|
Создаст и уничтожит класс `GUID`.
|
||||||
|
|
||||||
### Сохранение и загрузка из файла.
|
### Перевод в строку.
|
||||||
|
|
||||||
За сохранение и загрузку отвечают 2 метода: `SaveToFile` и `LoadFromFile`.
|
За перевод в строку отвечают 2 метода: «магический метод» `__toString` и `ToString`.
|
||||||
|
|
||||||
#### Сохранение в файл (метод `SaveToFile`)
|
#### «Магический метод» `__toString`
|
||||||
|
|
||||||
Этот метод сохраняет содержимое JSON в файл. Он содержит **1 обязательный параметр**:
|
Этот метод переводит GUID в строку. Он не содержит параметров.
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
Метод возвращает `string` - строковое представление GUID.
|
||||||
|
|
||||||
Метод возвращает `bool` - сохранены ли данные в файл: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
Синтаксис:
|
||||||
|
|
||||||
public function SaveToFile (string $fileName): bool
|
public function __toString (): string
|
||||||
|
|
||||||
**Пример:**
|
**Пример:**
|
||||||
|
|
||||||
// Имя файла
|
// Создаю пустой GUID
|
||||||
$fileName = __DIR__ . "/test.json";
|
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
|
||||||
// Создаём класс
|
// Вывожу его
|
||||||
$json = new JsonReWriter();
|
echo $guid;
|
||||||
// Заполним данными
|
|
||||||
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` представлено далее:
|
В результате, на экране появится:
|
||||||
|
|
||||||
{
|
00000000-0000-0000-0000-000000000000
|
||||||
"test": {
|
|
||||||
"subtest": {
|
|
||||||
"AAA": "123",
|
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#### Загрузка файла (метод `LoadFromFile`)
|
#### Метод `ToString`
|
||||||
|
|
||||||
Этот метод загружает содержимое файла в класс. Он содержит **1 обязательный параметр**:
|
Этот метод полностью аналогичен методу `__toString`.
|
||||||
|
|
||||||
* `string $fileName` - имя файла на диске.
|
|
||||||
|
|
||||||
Метод возвращает `bool` - загружены ли данные из файла: `true` - да, `false` - нет.
|
|
||||||
|
|
||||||
Синтаксис:
|
Синтаксис:
|
||||||
|
|
||||||
public function LoadFromFile (string $fileName): bool
|
public function ToString (): string
|
||||||
|
|
||||||
**Пример:**
|
**Пример:**
|
||||||
Пусть дан файл `test.json`, содержимое которого представлено далее:
|
|
||||||
|
|
||||||
{
|
// Создаю пустой GUID
|
||||||
"test": {
|
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
|
||||||
"subtest": {
|
// Вывожу его
|
||||||
"AAA": "123",
|
echo $guid->ToString();
|
||||||
"BBB": 1.23
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"test1": {
|
|
||||||
"test": 123
|
|
||||||
},
|
|
||||||
"test2": {
|
|
||||||
"test": true
|
|
||||||
},
|
|
||||||
"test3": {
|
|
||||||
"test": {
|
|
||||||
"res": "[1,2,3]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Следующий код загрузит это содержимое в класс:
|
В результате, на экране появится:
|
||||||
|
|
||||||
// Имя файла
|
00000000-0000-0000-0000-000000000000
|
||||||
$fileName = __DIR__ . "/test.json";
|
|
||||||
// Создаём класс
|
|
||||||
$json = new JsonReWriter();
|
|
||||||
// Загружаю данные
|
|
||||||
$json->LoadFromFile($fileName);
|
|
||||||
|
|
||||||
### Чтение данных
|
### Работа с массивом байтов
|
||||||
|
|
||||||
Для чтения данных используется один общий метод `Read` и 7 его производных метода: `ReadString`, `ReadInt`, `ReadFloat`,
|
Для преобразования GUID в массив байтов и обратно используется 2 метода: `ToBytes` и `FromBytes`.
|
||||||
`ReadBool`, `ReadArray`, `ReadObject` и `ReadSerializable`.
|
|
||||||
|
|
||||||
#### Метод `Read`
|
#### Метод `ToBytes`
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
Это метод переводит GUID в массив байтов. Он не имеет никаких параметров.
|
||||||
необязательный параметр** `mixed $default` (значение по умолчанию, задан по умолчанию в `null`).
|
|
||||||
|
|
||||||
Этот метод возвращает `mixed`: значение ключа JSON или значение по умолчанию.
|
Этот метод возвращает `array`: массив байтов, полученный из GUID.
|
||||||
|
|
||||||
Синтаксис:
|
Синтаксис:
|
||||||
|
|
||||||
public function Read (string $key, mixed $default = null): mixed
|
public function ToBytes (): array
|
||||||
|
|
||||||
**Пример,**
|
**Пример,**
|
||||||
|
|
||||||
// Создаю класс
|
// Создаю пустой GUID
|
||||||
$json = new JsonReWriter();
|
$guid = new GUID ('00000000-0000-0000-0000-000000000000');
|
||||||
// Заполняю данными
|
|
||||||
try {
|
// Вывожу его значение в строку
|
||||||
$json->Write("test/subtest/AAA", "123");
|
$r = var_export($guid->ToBytes());
|
||||||
$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`.
|
// И вывожу их
|
||||||
|
echo $r;
|
||||||
|
|
||||||
#### Метод `ReadString`
|
В результате, на экране появится:
|
||||||
|
|
||||||
Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1
|
array(16) {
|
||||||
необязательный параметр** `string $default` (значение по умолчанию, задан по умолчанию в `""`).
|
[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)
|
||||||
|
}
|
||||||
|
|
||||||
Этот метод возвращает `string`: значение ключа JSON или значение по умолчанию.
|
#### Метод `FromBytes`
|
||||||
|
|
||||||
|
Это статический метод, который переводит массив байтов, заданный в параметре `array $bytes` в класс GUID.
|
||||||
|
|
||||||
|
Этот метод возвращает экземпляр класса `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`
|
#### Метод `ReadInt`
|
||||||
|
|
||||||
|
@ -26,12 +26,6 @@ use Throwable;
|
|||||||
if (!defined('GUID_EMPTY_STRING'))
|
if (!defined('GUID_EMPTY_STRING'))
|
||||||
define('GUID_EMPTY_STRING', '00000000-0000-0000-0000-000000000000');
|
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.
|
* Класс GUID предназначен для работы с уникальными идентификаторами формата UUID/GUID.
|
||||||
*
|
*
|
||||||
@ -42,11 +36,6 @@ if (!defined('GUID_EMPTY'))
|
|||||||
*/
|
*/
|
||||||
final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable, IHashable, JsonSerializable
|
final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable, IHashable, JsonSerializable
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Константа для пустого GUID.
|
|
||||||
*/
|
|
||||||
public const GUID EMPTY = GUID_EMPTY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string $Value Внутреннее свойство для хранения значения GUID.
|
* @var string $Value Внутреннее свойство для хранения значения GUID.
|
||||||
*/
|
*/
|
||||||
@ -72,6 +61,16 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
|
|||||||
$this->Value = $value;
|
$this->Value = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает пустой GUID.
|
||||||
|
*
|
||||||
|
* @return GUID Пустой GUID.
|
||||||
|
*/
|
||||||
|
public static function Empty (): GUID
|
||||||
|
{
|
||||||
|
return new GUID();
|
||||||
|
}
|
||||||
|
|
||||||
// Подключаем трейт реализующий интерфейс ISerializable
|
// Подключаем трейт реализующий интерфейс ISerializable
|
||||||
use GUIDSerializeTrait;
|
use GUIDSerializeTrait;
|
||||||
|
|
||||||
@ -209,16 +208,6 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
|
|||||||
: new GUID($guidString);
|
: new GUID($guidString);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Преобразует объект GUID в строку.
|
|
||||||
*
|
|
||||||
* @return string Строковое представление GUID.
|
|
||||||
*/
|
|
||||||
public function __toString (): string
|
|
||||||
{
|
|
||||||
return $this->Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает сегмент GUID по его номеру.
|
* Возвращает сегмент GUID по его номеру.
|
||||||
*
|
*
|
||||||
@ -264,6 +253,16 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
|
|||||||
* @return string Строковое представление GUID.
|
* @return string Строковое представление GUID.
|
||||||
*/
|
*/
|
||||||
public function ToString (): string
|
public function ToString (): string
|
||||||
|
{
|
||||||
|
return $this->__toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Преобразует объект GUID в строку.
|
||||||
|
*
|
||||||
|
* @return string Строковое представление GUID.
|
||||||
|
*/
|
||||||
|
public function __toString (): string
|
||||||
{
|
{
|
||||||
return $this->Value;
|
return $this->Value;
|
||||||
}
|
}
|
||||||
|
103
tests/types/GUIDTest.php
Normal file
103
tests/types/GUIDTest.php
Normal 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 ()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user