Aller au contenu

Collection (de type Arraylist en Java) en PHP


Sujets conseillés

Posté

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.

Veuillez vous connecter pour commenter

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



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