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 :

Récupérer une variable d'un objet stocké dans un tableau


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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    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
    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]

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Bien sûr que ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$tabs[$id]->name()
    pour extraire la valeur tu dois impérativement vérifier l'existence de $tabs[$id] sinon plantage.

  5. #5
    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
    D'accord

    Merci beaucoup pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 11/10/2012, 19h27
  2. Réponses: 2
    Dernier message: 30/05/2012, 14h45
  3. Accéder à une variable d'un objet contenu dans une collection
    Par derlone dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/04/2009, 17h50
  4. Réponses: 0
    Dernier message: 12/10/2008, 17h37
  5. Réponses: 0
    Dernier message: 07/08/2008, 15h41

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