[Д] [ObjectArray->Add] Функция добавляет объект в массив объектов, хранящийся в данном классе (аналогично добавлению элемента в массив с помощью []).

[Д] [ObjectArray->AddRange] Функция добавляет массив объектов (или объекты, заданные с помощью array) в массив объектов, хранящийся в данном классе.

[И] [ObjectArray->Update] Добавление с помощью foreach заменено на AddRange.

[Д] [IDuplicated] Добавлен интерфейс реализации дублирования классов.

[Д] [IStoredAtSQL] Добавлен интерфейс поддержки моделей и классов, реализующих хранение свойств в SQL базе данных.
This commit is contained in:
Александр Бабаев 2025-04-24 07:31:59 +03:00
parent 8da3c1df38
commit 697f6b81b9
6 changed files with 189 additions and 38 deletions

View File

@ -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);
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace goodboyalex\php_components_pack\interfaces;
/**
* Интерфейс реализации дублирования классов.
*
* @author Александр Бабаев
* @package freecms
* @version 0.1
* @since 0.1
*/
interface IDuplicated
{
/**
* Дублирование класса.
*
* @return object Класс-дублёр.
*/
public function Duplicate (): object;
}

View File

@ -0,0 +1,32 @@
<?php
namespace goodboyalex\php_components_pack\interfaces;
/**
* Интерфейс поддержки моделей и классов, реализующих хранение свойств в SQL базе данных.
*
* @author Александр Бабаев
* @package freecms
* @version 0.1
* @since 0.1
*/
interface IStoredAtSQL
{
/**
* Вывод параметров добавления/обновления данных в базу данных.
*
* @param bool $withId Нужно ли добавлять Id в массив
*
* @return array Массив параметров
*/
public function ToSQL (bool $withId = true): array;
/**
* Преобразование данных из базы данных в модель, класс.
*
* @param array $sqlData Данные из базы данных
*
* @return self Класс модели с заполненными данными из базы данных
*/
public function FromSQL (array $sqlData): self;
}

View File

@ -196,8 +196,7 @@ trait ObjectArrayLINQTrait
$result = $this->Delete($wherePredicate);
// Добавляю новые элементы
foreach ($setItems as $item)
$this->Container[] = $item;
$this->AddRange($setItems);
// Возвращаю результат
return $result;

View File

@ -0,0 +1,81 @@
<?php
namespace goodboyalex\php_components_pack\traits\ObjectArray;
use goodboyalex\php_components_pack\classes\ObjectArray;
/**
* Часть кода класса ObjectArray, отвечающая за специальные функции.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.0
*/
trait ObjectArraySpecialTrait
{
/**
* Очищает массив объектов, хранящийся в данном классе.
*
* @return void
*/
public function Clear (): void
{
// Очищаем массив
unset($this->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);
}
}

View File

@ -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());
}
}