pieces[] = $piece; } /** * Supprime une pièce du tableau par son index. * * @param int $index L'index de la pièce à supprimer. * @return void */ 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 } } /** * Convertit le tableau de pièces en une chaîne de caractères. * * @return string Une chaîne représentant toutes les pièces. */ public function __toString(): string { $output = ""; foreach ($this->pieces as $piece) { $output .= $piece->__toString() . "\n"; } return $output; } /** * Convertit la collection de pièces en JSON. * * @return string Une chaîne JSON représentant les pièces. */ public function toJson(): string { return json_encode(array_map(fn($piece) => json_decode($piece->toJson(), true), $this->pieces)); } /** * Crée une instance de ArrayPieceSquadro depuis une chaîne JSON. * * @param string $json Une chaîne JSON représentant un tableau de pièces. * @return ArrayPieceSquadro Une instance créée à partir du 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 /** * Vérifie si une pièce existe à l'index donné. * * @param mixed $offset L'index à vérifier. * @return bool True si la pièce existe, sinon false. */ public function offsetExists($offset): bool { return isset($this->pieces[$offset]); } /** * Récupère une pièce par son index. * * @param mixed $offset L'index de la pièce. * @return PieceSquadro|null La pièce correspondante ou null si l'index n'existe pas. */ public function offsetGet($offset): ?PieceSquadro { return $this->pieces[$offset] ?? null; } /** * Définit une pièce à un index donné. * * Si l'index est null, la pièce est ajoutée à la fin du tableau. * * @param mixed $offset L'index où ajouter/modifier la pièce. * @param mixed $value La pièce à ajouter (doit être une instance de PieceSquadro). * @return void * * @throws InvalidArgumentException Si la valeur n'est pas une instance de PieceSquadro. */ 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 doit être une instance de PieceSquadro"); } } /** * Supprime une pièce par son index. * * @param mixed $offset L'index de la pièce à supprimer. * @return void */ public function offsetUnset($offset): void { if (isset($this->pieces[$offset])) { unset($this->pieces[$offset]); } } // Implémentation de Countable /** * Retourne le nombre de pièces dans le tableau. * * @return int Le nombre total de pièces. */ public function count(): int { return count($this->pieces); } } ?>