Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 19/03/2011, 23h57   #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 Quel niveau d'accès pour $this

Bonjour à tous,

Je ne débute pas en PHP mais ma question est un peu bête alors je la met ici.

Je fait une classe pour une web-app, j'ai donc plusieurs méthodes notamment une exist($anObject) qui test si l'objet passé en paramètre existe dans la collection ou non.
J'ai une autre méthode getIndexOfObject($anObject) dans laquelle je souhaite tester l'existence de l'objet dans la collection avant de le chercher dedans.
Pour cela j'appel donc ma méthode exist($anObject).

Seulement ds la méthode exist je vérifie aussi le que la classe de l'objet correspond à la classe de la collection en cours. J'utilise donc $this.

Je me demande si le $this dans la méthode exist($anObject) va fonctionner étant donnée que j'apelle cette méthode tout simplement depuis une autre méthode.

Voici le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Test d'existence d'un objet ou non dans la collection
		public function exist($anObject)
		{
			if(checkClasse($anObject, $this->classe)) // Vérification de la correspondance des classes
			{	
				if(array_key_exists($anObject->id, $this->collection)) // Vérification de la présence de l'objet ds la collection
				{
					$exist = 1;
				}
				else
				{
					$exist = 0;
				}
 
				return($exist);
			}
			else //Si l'objet demandé n'est pas une instance de la même classe que la collection
			{
				echo $this->errors['classes_dont_match'];
 
				$exist = -1;
				return($exist);
			}
		}
 
		// Retourne l'index d'un objet passé en paramètre
		public function getIndexOfObject($anObject)
		{
			if(checkClasse($anObject))
			{
				if(exist($anObject))
				{
					...
				}
				else
				{
					...
				}
			}
			else
			{
				...
			}
		}
Je sais pas si je me suis bien expliqué alors si c'est pas le cas dites le moi

Merci d'avance pour vos réponses
Tibimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 23h16   #2
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
Je viens de penser (ouai je débute un peu encore en PHP OO) que si je modifie mon code ainsi, ca devrait marcher :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Test d'existence d'un objet ou non dans la collection
		public function exist($anObject)
		{
			if(checkClasse($anObject, $this->classe)) // Vérification de la correspondance des classes
			{	
				if(array_key_exists($anObject->id, $this->collection)) // Vérification de la présence de l'objet ds la collection
				{
					$exist = 1;
				}
				else
				{
					$exist = 0;
				}
 
				return($exist);
			}
			else //Si l'objet demandé n'est pas une instance de la même classe que la collection
			{
				echo $this->errors['classes_dont_correspond'];
 
				$exist = -1;
				return($exist);
			}
		}
 
		// Retourne l'index d'un objet passé en paramètre
		public function getIndexOfObject($anObject)
		{
			if($this->checkClasse($anObject))
			{
				if($this->exist($anObject))
				{
					...
				}
				else
				{
					...
				}
			}
			else
			{
			       ...
			}
		}
Ca devrait marcher non, vous confirmez ou infirmez ?
Tibimac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 12h39   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Hello

Citation:
Je fait une classe pour une web-app, j'ai donc plusieurs méthodes notamment une exist($anObject) qui test si l'objet passé en paramètre existe dans la collection ou non.
C'est typiquement le rôle d'un collection SplObjectStorage.

Citation:
J'ai une autre méthode getIndexOfObject($anObject) dans laquelle je souhaite tester l'existence de l'objet dans la collection avant de le chercher dedans.
Pour cela j'appel donc ma méthode exist($anObject).
Tu devrais plutôt implémenter ArrayAccess et fournir à ton hashmap __isset et __unset

En d'autres termes, tu devrais te tourner vers l'extension des classes SPL existantes plutôt que de redéfinir ArrayObject ou SplObjectStorage.

Tu as également un problème de conception: la méthode "exist" fait intervenir un array_key_exists en demandant l'id de l'instance qu'il reçoit en paramètre, ce qui induit un couplage fort entre ton hashmap et ses éléments. Si c'est effectivement ce qu'on veut, il serait de bon ton de spécifier quel type d'objet exists peut recevoir en paramètre, ce qui peut se faire de cette façon:
Code :
1
2
3
 
...
public function exist (MaClasse $object) { ...
La fonction checkclass peut également être remplacée par is_a: http://php.net/manual/en/function.is-a.php

D'ailleurs tu peux aussi bien remplacer:
Code :
1
2
3
4
5
6
7
8
9
 
				if(array_key_exists($anObject->id, $this->collection)) // Vérification de la présence de l'objet ds la collection
				{
					$exist = 1;
				}
				else
				{
					$exist = 0;
				}
par
Code :
return array_key_exists($anObject->id, $this->collection);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h10.


 
 
 
 
Partenaires

Hébergement Web