Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2011, 22h31   #1
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 19
Points : 19
Par défaut Récupérer une variable d'un objet stocké dans un tableau

Bonjour/Bonsoir à tous.

J'ai cherché sur internet et dans ces forums mais je n'ai pas trouvé de reeponse à ma question c'est pourquoi me voilà.

Dans mon appli web je vais utiliser des Collections (tableau php) pour stocker ce que je récupère de ma base. Exemple; une collection $Adherents pour stocker les adhérents, une collection $Cotisations pour stocker les cotisations.
Chaque adhérent récupéré est transformé en objet avant d'être inséré dans sa collection.

Ensuite j'ai une méthode qui permet de rechercher un objet dans une collection en regardant si l'id de l'objet correspond à l'id de l'objet recherché.

Ma classe Collection étant ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Collection
	{
		private $classe;
		private $tab;
		private $errors(
						'classes_dont_match' => "La classe de l'objet recherché ne correspond pas à la classe des objets stockés dans cette collection",
						);
 
		public function __construct($classe)
		{
			$this->classe = $classe;
			$this->tab = array();
		}
.......
	}
Pour récupérer l'id d'un objet se trouvant dans la collection comment dois-je faire ?

J'ai pensé à faire :
Code :
1
2
3
4
5
public function getIndexOfObject($anObject)
{
       while($i <= nbElem() && $this->tab[$i]->id != $anObject->id)
.....
}
Cela est-il la bonne synthaxe ?
Merci d'avance pour votre aide
Tibimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 00h47   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut,
En PHP une collection peut se résumer à un simple tableau.
Si tu manipules des objets ayant un identifiant unique il est possible de les stocker dans un tableau avec pour clé leur identifiant et pour valeur l'instance de l'objet.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$tabs = array();
# insertion d'un objet :
$tabs[$obj->id] = $obj; 
$tabs[$obj->id()] = $obj;
 
# pour récupérer une instance | NULL si pas d'objet correspondant :
return $tabs[$id];
 
# pour vérifier l'existence d'une instance :
array_key_exists($id, $tabs);
 
# pour retirer un objet de la collection : 
unset($tabs[$id]);
Enfin, selon ton niveau en PHP tu peux aussi te rabattre sur la SPL avec l'objet SplObjectStorage (attach(), detach() ...)

Bref pour ce genre de situation les solutions ne manquent pas et ne te sers pas de l'instance de l'objet comme clé de ton tableau parce que tes perfs vont dégringoler très vite surtout si la collection est volumineuse. Une clé d'un tableau doit être de préférence (toujours) une chaine ou un numérique.
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 00h53   #3
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 19
Points : 19
Ah ouai cool pas bête de faire un tableau associatif plutot qu'un tableau simple et de mettre l'id en index. Ca va me faire gagner du temps et ca sera effectivement moins lourd.
Merci

Et du coup si je veux récupérer le nom d'un adhérent dans la collection, est-ce qu'un $this->$tabs[$id]->name fonctionne ?

[EDIT]Le coup du tableau associatif avec pour index l'id vient non seulement de me faire raccourcir et simplifier la méthode de test sur l'existance d'un objet dans le tableau mais du coup m'a aussi permis de supprimer entièrement la méthode que j'avais faite pour renvoyer l'index auquel se situé un objet dans la collection (s'il été trouvé). MERCI [/EDIT]
Tibimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 10h43   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Bonjour,

Bien sûr que ceci fonctionne :
Code :
$this->$tabs[$id]->name
Mais si tu ne veux pas de message d'erreur, assures toi bien que le $tabs[$id] existe bien.

Si tu utilises une fonction du genre
Code :
$this->$tabs[$id]->name()
pour extraire la valeur tu dois impérativement vérifier l'existence de $tabs[$id] sinon plantage.
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 13h11   #5
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 93
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : octobre 2008
Messages : 93
Points : 19
Points : 19
D'accord

Merci beaucoup pour ton aide
Tibimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h19.


 
 
 
 
Partenaires

Hébergement Web