20250723 1.2 Бета 2
This commit is contained in:
parent
04f6849ff4
commit
f8f14244d0
@ -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`
|
||||
|
||||
|
@ -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
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