Newer
Older
/**
* Classe représentant une collection de pièces Squadro.
*
* Cette classe implémente les interfaces ArrayAccess et Countable, permettant de manipuler
* les pièces comme un tableau, tout en offrant des méthodes spécifiques pour
* ajouter, supprimer, convertir et manipuler les données des pièces.
*/
class ArrayPieceSquadro implements ArrayAccess, Countable {
/**
* Tableau contenant les instances de PieceSquadro.
*
* @var PieceSquadro[]
*/
/**
* Ajoute une pièce au tableau.
*
* @param PieceSquadro $piece La pièce à ajouter.
* @return void
*/
public function add(PieceSquadro $piece): void {
$this->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);
}
}
?>