From 697f6b81b98937d573426fea14eda75c1c3327ed Mon Sep 17 00:00:00 2001 From: babaev-an Date: Thu, 24 Apr 2025 07:31:59 +0300 Subject: [PATCH] 20250424 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Д] [ObjectArray->Add] Функция добавляет объект в массив объектов, хранящийся в данном классе (аналогично добавлению элемента в массив с помощью []). [Д] [ObjectArray->AddRange] Функция добавляет массив объектов (или объекты, заданные с помощью array) в массив объектов, хранящийся в данном классе. [И] [ObjectArray->Update] Добавление с помощью foreach заменено на AddRange. [Д] [IDuplicated] Добавлен интерфейс реализации дублирования классов. [Д] [IStoredAtSQL] Добавлен интерфейс поддержки моделей и классов, реализующих хранение свойств в SQL базе данных. --- sources/classes/ObjectArray.php | 40 +-------- sources/interfaces/IDuplicated.php | 21 +++++ sources/interfaces/IStoredAtSQL.php | 32 ++++++++ .../ObjectArray/ObjectArrayLINQTrait.php | 3 +- .../ObjectArray/ObjectArraySpecialTrait.php | 81 +++++++++++++++++++ tests/classes/ObjectArrayTest.php | 50 ++++++++++++ 6 files changed, 189 insertions(+), 38 deletions(-) create mode 100644 sources/interfaces/IDuplicated.php create mode 100644 sources/interfaces/IStoredAtSQL.php create mode 100644 sources/traits/ObjectArray/ObjectArraySpecialTrait.php diff --git a/sources/classes/ObjectArray.php b/sources/classes/ObjectArray.php index 0c027a4..ea412bd 100644 --- a/sources/classes/ObjectArray.php +++ b/sources/classes/ObjectArray.php @@ -9,6 +9,7 @@ use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayBasicTrait; use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayConstantsTrait; use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArrayLINQTrait; use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArraySearchAndSortTrait; +use goodboyalex\php_components_pack\traits\ObjectArray\ObjectArraySpecialTrait; use IteratorAggregate; /** @@ -38,6 +39,9 @@ final class ObjectArray implements ArrayAccess, IteratorAggregate, Countable, IS // LINQ-подобные методы use ObjectArrayLINQTrait; + // Специальные методы + use ObjectArraySpecialTrait; + /** * Конструктор класса. * @@ -47,40 +51,4 @@ final class ObjectArray implements ArrayAccess, IteratorAggregate, Countable, IS { $this->Container = $array; } - - /** - * Возвращает массив объектов, хранящихся в данном классе. - * - * @return array Массив объектов, хранящихся в данном классе. - */ - public function ToArray (): array - { - return $this->Container; - } - - /** - * Очищает массив объектов, хранящийся в данном классе. - * - * @return void - */ - public function Clear (): void - { - // Очищаем массив - unset($this->Container); - - // Создаем новый массив - $this->Container = []; - } - - /** - * Объединяет массив объектов, хранящийся в данном классе, с массивом объектов, переданным в качестве параметра. - * - * @param array $objects Массив объектов, который будет объединен с массивом объектов, хранящимся в данном классе. - * - * @return void - */ - public function Merge (array $objects): void - { - $this->Container = array_merge($this->Container, $objects); - } } \ No newline at end of file diff --git a/sources/interfaces/IDuplicated.php b/sources/interfaces/IDuplicated.php new file mode 100644 index 0000000..31cf1c7 --- /dev/null +++ b/sources/interfaces/IDuplicated.php @@ -0,0 +1,21 @@ +Delete($wherePredicate); // Добавляю новые элементы - foreach ($setItems as $item) - $this->Container[] = $item; + $this->AddRange($setItems); // Возвращаю результат return $result; diff --git a/sources/traits/ObjectArray/ObjectArraySpecialTrait.php b/sources/traits/ObjectArray/ObjectArraySpecialTrait.php new file mode 100644 index 0000000..f87f50e --- /dev/null +++ b/sources/traits/ObjectArray/ObjectArraySpecialTrait.php @@ -0,0 +1,81 @@ +Container); + + // Создаем новый массив + $this->Container = []; + } + + /** + * Добавляет объект в массив объектов, хранящийся в данном классе (аналогично добавлению элемента в массив с + * помощью []). + * + * @param mixed $object Объект, который будет добавлен в массив объектов, хранящийся в данном классе. + * + * @return void + */ + public function Add (mixed $object): void + { + $this->Container[] = $object; + } + + /** + * Добавляет массив объектов (или объекты, заданные с помощью array) в массив объектов, хранящийся в данном классе. + * + * @param ObjectArray|array $objects Массив объектов, которые будут добавлены в массив объектов. + * + * @return void + */ + public function AddRange (ObjectArray|array $objects): void + { + // Если передан массив, то не изменяем его, а если передан объект класса ObjectArray, то конвертируем его в массив объектов + $objectsToAdd = is_array($objects) ? $objects : $objects->ToArray(); + + // Добавляем массив объектов + $this->Merge($objectsToAdd); + } + + /** + * Возвращает массив объектов, хранящихся в данном классе. + * + * @return array Массив объектов, хранящихся в данном классе. + */ + public function ToArray (): array + { + return $this->Container; + } + + /** + * Объединяет массив объектов, хранящийся в данном классе, с массивом объектов, переданным в качестве параметра. + * + * @param array $objects Массив объектов, который будет объединен с массивом объектов, хранящимся в данном классе. + * + * @return void + */ + public function Merge (array $objects): void + { + $this->Container = array_merge($this->Container, $objects); + } +} \ No newline at end of file diff --git a/tests/classes/ObjectArrayTest.php b/tests/classes/ObjectArrayTest.php index 20eb353..6c4a176 100644 --- a/tests/classes/ObjectArrayTest.php +++ b/tests/classes/ObjectArrayTest.php @@ -43,6 +43,7 @@ class ObjectArrayTest extends TestCase require_once __DIR__ . '/../../sources/traits/ObjectArray/ObjectArrayConstantsTrait.php'; require_once __DIR__ . '/../../sources/traits/ObjectArray/ObjectArrayLINQTrait.php'; require_once __DIR__ . '/../../sources/traits/ObjectArray/ObjectArraySearchAndSortTrait.php'; + require_once __DIR__ . '/../../sources/traits/ObjectArray/ObjectArraySpecialTrait.php'; require_once __DIR__ . '/../../sources/classes/ObjectArray.php'; } @@ -430,4 +431,53 @@ class ObjectArrayTest extends TestCase $this->assertEquals(3, $b_Array->First()->b); $this->assertEquals(5, $b_Array->Last()->b); } + + public function testAdd () + { + $this->PrepareForTest(); + + $obj = new A("a", 3, true); + + $a_Array = new ObjectArray([]); + + $a_Array->Add($obj); + + $b_Array = $a_Array->GetRow(fn (A $a) => $a->a == "a"); + + $this->assertEquals(3, $b_Array->b); + } + + public function testAddRange () + { + $this->PrepareForTest(); + + $array = [ + new A("a", 3, true), + new A("c", 2, false), + new A("b", 1, true), + new A("d", 5, true), + new A("e", 4, true), + new A("f", 6, false) + ]; + + $a_Array = new ObjectArray(); + $a_Array->AddRange($array); + + $this->assertEquals(6, $a_Array->Count()); + + $array2 = [ + new A("g", 3, true), + new A("h", 2, false), + new A("i", 1, true), + new A("k", 5, true), + new A("l", 4, true), + new A("m", 6, false) + ]; + + $objectArray = new ObjectArray($array2); + + $a_Array->AddRange($objectArray); + + $this->assertEquals(12, $a_Array->Count()); + } } \ No newline at end of file