IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Quel niveau d'accès pour $this


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    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.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    return array_key_exists($anObject->id, $this->collection);

Discussions similaires

  1. Quels logiciels de modélisation pour une base de données ?
    Par octopus dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 11/06/2023, 17h20
  2. Quel niveau en programmation pour un "vrai" projet?
    Par RasJah dans le forum Création de jeux vidéo
    Réponses: 16
    Dernier message: 10/06/2015, 12h35
  3. Réponses: 5
    Dernier message: 02/09/2010, 15h56
  4. Quel niveau pour un MIAGE ?
    Par Imageek dans le forum Etudes
    Réponses: 7
    Dernier message: 21/04/2010, 16h55
  5. [CR] quel est le meilleur mode d'accès pour base Access
    Par IRAD dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/07/2004, 10h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo