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'] ?? '';
    }
}

Рекомендации по использованию

  1. При реализации интерфейса:

    • Обеспечьте полное соответствие данных при преобразовании
    • Сохраняйте целостность объекта при восстановлении
    • Обрабатывайте все возможные случаи в массиве
  2. При работе с данными:

    • Используйте 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']);
    }
}

Особенности реализации

  • Интерфейс обеспечивает двустороннее преобразование
  • Методы не должны изменять исходные данные
  • Рекомендуется проверять типы данных при восстановлении
  • Поддерживает вложенные структуры

На главную | Содержание