ArrayPieceSquadro.php 2,2 ko
Newer Older
<?php

class ArrayPieceSquadro implements ArrayAccess, Countable {
    // Attributs
    private array $pieces = [];

    // Ajouter une pièce au tableau
    public function add(PieceSquadro $piece): void {
        $this->pieces[] = $piece;
    }

    // Supprimer une pièce du tableau par index
    public function remove(int $index): void {
        if (isset($this->pieces[$index])) {
            unset($this->pieces[$index]);
            $this->pieces = array_values($this->pieces); // Réindexer le tableau
        }
    }

    // Méthode de conversion en chaîne de caractères
    public function __toString(): string {
        $output = "";
        foreach ($this->pieces as $piece) {
            $output .= $piece->__toString() . "\n";
        }
        return $output;
    }

    // Convertir en JSON
    public function toJson(): string {
        return json_encode(array_map(fn($piece) => json_decode($piece->toJson(), true), $this->pieces));
    }

    // Créer une instance depuis un JSON
    public static function fromJson(string $json): ArrayPieceSquadro {
        $data = json_decode($json, true);
        $arrayPieceSquadro = new self();
        foreach ($data as $pieceData) {
            $arrayPieceSquadro->add(PieceSquadro::fromJson(json_encode($pieceData)));
        }
        return $arrayPieceSquadro;
    }

    // Implémentation de ArrayAccess
    public function offsetExists($offset): bool {
        return isset($this->pieces[$offset]);
    }

    public function offsetGet($offset): ?PieceSquadro {
        return $this->pieces[$offset] ?? null;
    }

    public function offsetSet($offset, $value): void {
        if ($value instanceof PieceSquadro) {
            if (is_null($offset)) {
                $this->pieces[] = $value;
            } else {
                $this->pieces[$offset] = $value;
            }
        } else {
            throw new InvalidArgumentException("Value must be an instance of PieceSquadro");
        }
    }

    public function offsetUnset($offset): void {
        if (isset($this->pieces[$offset])) {
            unset($this->pieces[$offset]);
        }
    }

    // Implémentation de Countable
    public function count(): int {
        return count($this->pieces);
    }
}

?>