diff --git a/sources/types/GUID.md b/sources/types/GUID.md index 75f64bf..0c529d1 100644 --- a/sources/types/GUID.md +++ b/sources/types/GUID.md @@ -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(); - } - - // Получаю значение - $float = (float)$json->Read("test/subtest/BBB")); + // Создаю пустой GUID + $guid = new GUID ('00000000-0000-0000-0000-000000000000'); + + // Вывожу его значение в строку + $r = var_export($guid->ToBytes()); -В результате, переменная `$float` будет иметь значение `1.23`. + // И вывожу их + echo $r; -#### Метод `ReadString` +В результате, на экране появится: -Это метод, который читает значение ключа JSON. Он имеет **1 обязательный параметр** `string $key` (ключ) и **1 -необязательный параметр** `string $default` (значение по умолчанию, задан по умолчанию в `""`). + 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) + } -Этот метод возвращает `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` diff --git a/sources/types/GUID.php b/sources/types/GUID.php index 57f5372..62743dd 100644 --- a/sources/types/GUID.php +++ b/sources/types/GUID.php @@ -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; } diff --git a/tests/types/GUIDTest.php b/tests/types/GUIDTest.php new file mode 100644 index 0000000..f154906 --- /dev/null +++ b/tests/types/GUIDTest.php @@ -0,0 +1,103 @@ +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 () + { + + } +}