Aller au contenu

Collection (de type Arraylist en Java) en PHP


pacci

Sujets conseillés

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 1
echo $CC->DonnerObjet(2)->getNom()); //devrai me donner Ricardo3
*/

Voyant les buggs, j'ai stoppé les tests.

Merci d'avance pour vos réponses.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...