pacci Posté 5 Juin 2011 Posté 5 Juin 2011 Bonjour à tous. J'ai recherché une class de Collection en PHP comme un arraylist en JAVA. N'ayant pas trouvé j'ai commencé à développer la mienne. Celle-ci ne marche pas donc je m'en remet à vous pour savoir si je ne suis pas partie dans la ré-invention de la roue et si il existe une class par défault dans PHP le faisant. Je vous propose mon code : <?php /* * Class métier de collection * une collection est un tableau d'objets sur lequel on attribut des traitements */ class Collection{ private $objets; // Tableau qui va être renvoyer private $num=0; // Nombre d'occurence private $classe; // Constructeur, créer un tableau public function Collection($class){ $this->classe = $class; $this->objets=array(); } // Retourne le nombre d'éléments de la collection public function Cardinal(){ $i=0; foreach($this->objets as $tbl){ $i++; } return $i; } // Vérifie si l'objet existe dans la collection public function Existe($Objet){ $lenght = $this->Cardinal() - 1; for($i=0;$i>=$lenght;$i++){ if($Objet == $this->objets[$i]){ // On arrête le traitement et on renvoi .vrai. return true; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } // Retourne l'index de l'objet passé en paramètre dans la collection // Le premier objet de la collection à pour index 0 public function Index($Objet){ $lenght = $this->Cardinal() - 1; for($i=0;$i>=$lenght;$i++){ if($Objet == $this->objets[$i]){ return $i; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } // Retourne l'objet qui se trouve à l'index passé en paramètre public function DonnerObjet($k){ $lenght = $this->Cardinal() - 1; echo'<script type="text/javascript">window.alert(\''.$lenght.'\');</script>'; // Si le paramètre est plus grand que la taille du tableau alors routourne .faux. if($k > $lenght){return false;} else{ for($i=0;$i>=$lenght;$i++){ if($i == $k){ //echo'<script type="text/javascript">window.alert(\''.$i.'\');</script>'; return $this->objets[$i]; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } } // Ajoute un objet à la collection public function AjouterObjet($Objet){ $this->objets[] = $Objet; } // Remplace dans la collection l'objet figurant à l'index passé en paramètre par l'objet en paramètre public function RemplacerObjet($i,$Objet){ $lenght = $this->Cardinal() - 1; // Si $i est inférieur ou supérieur à la taille de la collection alors on retourne .faux. // Sinon on remplace et on retourne .vrai. if($i < $lenght || $i > $lenght){return false;} else{ $this->objets[$i] = $Objet; return true; } } // Supprime l'objet passé en paramètre public function SupprimerObjet($Objet){ $lenght = $this->Cardinal() - 1; // Taille for($i=0;$i>=$lenght;$i++){ if($this->objets[$i]==$Objet){ // array_splice(tableau, ligne, nb_doccurence_a_supprimer) $this->objets = array_splice($this->objets, $i, 1); return true; } } return false; } }?> En fonctionnement : $Contact1 = new Contact('1', 'Dupond1', 'Ricardo1', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00');$Contact2 = new Contact('1', 'Dupond2', 'Ricardo2', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00');$Contact3 = new Contact('1', 'Dupond3', 'Ricardo3', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00');$CC = new Collection('Contact');// Ca marche$CC->AjouterObjet($Contact1);$CC->AjouterObjet($Contact2);$CC->AjouterObjet($Contact3);echo $CC->Cardinal(); //Ca marche et m'affiche bien 3/*echo $CC->Index($Contact2); //marche pas devrais me donner 1echo $CC->DonnerObjet(2)->getNom()); //devrai me donner Ricardo3*/ Voyant les buggs, j'ai stoppé les tests. Merci d'avance pour vos réponses.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant