interfaces/IArrayable.md
Интерфейс IArrayable
Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 1.1.2
Описание
Интерфейс определяет контракт для классов, которые могут быть преобразованы в массив и обратно. Используется для обеспечения единообразного механизма преобразования объектов.
Методы интерфейса
toArray()
public function toArray(): array
Описание: Преобразует объект в массив.
Возвращаемое значение:
array— массив, представляющий свойства объекта
Пример использования:
class User implements IArrayable
{
public function toArray(): array
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email
];
}
}
fromArray()
public function fromArray(array $array): void
Описание: Восстанавливает состояние объекта из массива.
Параметр:
$array(array) — массив с данными для восстановления
Пример использования:
class User implements IArrayable
{
public function fromArray(array $array): void
{
$this->id = $array['id'] ?? null;
$this->name = $array['name'] ?? '';
$this->email = $array['email'] ?? '';
}
}
Рекомендации по использованию
-
При реализации интерфейса:
- Обеспечьте полное соответствие данных при преобразовании
- Сохраняйте целостность объекта при восстановлении
- Обрабатывайте все возможные случаи в массиве
-
При работе с данными:
- Используйте
toArray()для сериализации - Применяйте
fromArray()для десериализации - Проверяйте корректность входных данных
- Используйте
Примеры реализации
Базовый пример
class Product implements IArrayable
{
private int $id;
private string $name;
private float $price;
public function toArray(): array
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price
];
}
public function fromArray(array $array): void
{
$this->id = (int)$array['id'] ?? 0;
$this->name = (string)$array['name'] ?? '';
$this->price = (float)$array['price'] ?? 0.0;
}
}
Пример с вложенными объектами
class Order implements IArrayable
{
private User $user;
private array $products;
public function toArray(): array
{
return [
'user' => $this->user->toArray(),
'products' => array_map(fn($product) => $product->toArray(), $this->products)
];
}
public function fromArray(array $array): void
{
$this->user = new User();
$this->user->fromArray($array['user']);
$this->products = array_map(function($productData) {
$product = new Product();
$product->fromArray($productData);
return $product;
}, $array['products']);
}
}
Особенности реализации
- Интерфейс обеспечивает двустороннее преобразование
- Методы не должны изменять исходные данные
- Рекомендуется проверять типы данных при восстановлении
- Поддерживает вложенные структуры