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 :

Équivalent des collections Java


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 14
    Points
    14
    Par défaut Équivalent des collections Java
    Bonjour,
    Je suis dev java et je me met au PHP (5 en l'occurence avec la poo).
    Mon souci pour le moment est de trouver une manière correcte de transporter une collection d'objet et de pouvoir itérer sur l'objet qui les stocke pour pouvoir les récupérer.
    Sachant que je voudrais que la taille du truc stockant mes objets devrait etre dynamique, bref en gros je cherche une collection comme il en existe en java.
    Y-a-t-il un équivalent en php ou alors une autre logique de fonctionnement?
    Merci pour vos réponses car je suis un peu perdu.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Je ne connaîs pas bien Java et ne sais pas à quoi correspond précisément une collection, mais je pense qu'un tableau répondra à ton besoin.
    Doc : http://fr.php.net/array
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    La logique est un peu différente en PHP puisque historiquement les tableaux sont d'office associatifs (en gros l'équivalent d'une Map ) et que tu disposes d'un ensemble très complet de fonctions dédiées.

    De plus la boucle foreach te permet de passer en revue tous les éléments du tableau, boucle foreach dont s'est largement inspiré Java en 1.5...

    Maintenant, depuis la V5 PHP peut aussi manipuler les tableaux comme des objets, avec Iterator, etc... Ici pour un excellent tutoriel dvd.com


    ERE
    Quand une tête pense seule, elle devient folle.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut Collection.class.php
    Salut voici ce que j'ai fait en espérant que ça t'aide =)

    (soyez indulgent je suis débutant en POO)

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    <?php
    /*
    * Source File	:  Collection.class.php
    * Author        :  olivier
    * Project name  :  iTask                 :  14/04/2009
    * Modified   	:  14/04/2009
    * @Description	:  Definition of the class Collection
    */
     
    class Collection implements Iterator, Countable, ArrayAccess{
     
    	//Attributes
     
    	private $collection = array();
     
    	/**
    	  * ajoute un objet à la collection
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @param Object $o
    	  * @return void
    	  *
    	  */
    	public function add($o){	
    		$this->collection[] = $o;
    	}
     
    	/**
    	  * efface les objets de la collection
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return void
    	  *
    	  */
    	public function clear(){
    		$this->collection = array();
    	} 
     
    	/**
    	  * Returne si l'objet est contenu dans la collection
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return bool true | false
    	  *
    	  */
    	public function contains($o){
    		if(in_array($this->collection, $o))
    		{
    			return true;
    		}
    		return false;
    	}
     
    	/**	
    	  * Compare si l'onjet courant et l'objet passé en parametre sont egaux
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @param Object $o	
    	  * @return bool	
    	  *
    	  */
    	public function equals($o){
    		foreach($this->collection as $object){
    			if($object === $o){
    				return true;
    			}
    			return false;
    		}
     
    	}
     
    	/**
    	  * retourne vrai si l'objet est vide.
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return mixed false | null
    	  *
    	  */
    	public function isEmpty(){
    		if($this->count() >= 0)
    		{
    			return false;
    		}
    		return null;
    	}
     
    	/**
    	  * efface un element de la collection
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return array $collection
    	  *
    	  */
    	public function remove($o){
    		unset($this->collection[array_search($o, $this->collection)]);
    		return array_shift($this->collection);
    	}
     
     
    	/**
    	  * Returne le nombre d'elements dans la collection
    	  * @author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return int $collection
    	  *
    	  */
    	public function size(){
    		return sizeof($this->collection);
    	} 
     
    	/**
    	  * retourne le nombre total de la collection
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  * @return int $collection
    	  *
    	  */
    	public function count(){	
    		return count($this->collection);
    	}
     
    	/**
    	  * place l'itérateur sur le premier element
    	  *	@author		<a href="">Olivier albertini</a>
    	  * @access public
    	  *
    	  */
    	public function rewind(){
    		reset($this->collection);
    	}
     
     
    	/**
    	  * se met sur l'element suivant
    	  *
    	  * @access public
    	  *
    	  */
    	public function next(){
    		return next($this->collection);	
    	} 
     
    	/**
    	  * retourne la clé de l'élément courant
    	  *
    	  * @access public
    	  *
    	  */
    	public function key(){
    		return key($this->collection);
    	}
     
    	/**
    	  * Retourne l'element courant
    	  *	@return object
    	  * @access public
    	  *	
    	  */	
    	public function current(){
    		return current($this->collection);
    	}
     
    	/**
    	  * regarde si il y a encore un element courant apres un rewind() ou next().
    	  *
    	  * @access public
    	  *
    	  */
    	public function valid(){
    		return array_key_exists(key($this->collection),$this->collection);
    	}
     
    	/**
    	  *
    	  * @param $offset
    	  * @return unknown_type
    	  */
    	public function OffsetExists($offset){
    		return isset($this->collection[$offset]);
    	}
     
    	/**
    	  * change l'objet a l'indice de la collection
    	  * @access public
    	  * @param $offset
    	  * @return unknown_type
    	  *
    	  */
    	public function offsetSet($offset, $value){
    		return $this->collection[$offset] = $value ;
    	}
     
     
    	/**
    	  *	retourne l'objet à l'indice passé en parametre
    	  *
    	  * @access public
    	  * @param $offset
    	  * @param $value
    	  * @return unknown_type
    	  *
    	  */	
    	public function offsetGet($offset){
    		return $this->collection[$offset];
    	}
     
    	/**	Détruit l'objet qui se trouve à l'indice 
    	  *	
    	  * @access public	
    	  * @param int $offset	
    	  * @return void	
    	  *	
    	  */	
    	public function offsetUnset($offset){
    		unset($this->collection[$offset]);
    	}
    }
    ?>

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut
    si vous avez des améliorations je suis toute ouii =)

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    La logique est un peu différente en PHP puisque historiquement les tableaux sont d'office associatifs (en gros l'équivalent d'une Map ) et que tu disposes d'un ensemble très complet de fonctions dédiées.

    De plus la boucle foreach te permet de passer en revue tous les éléments du tableau, boucle foreach dont s'est largement inspiré Java en 1.5...

    Maintenant, depuis la V5 PHP peut aussi manipuler les tableaux comme des objets, avec Iterator, etc... Ici pour un excellent tutoriel dvd.com


    ERE
    Le tuto pourrait être mis à jour, car la SPL s'est enrichie de structures de données qui peuvent être intéressantes : http://fr.php.net/manual/fr/spl.datastructures.php
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    @lerieure
    J'ai survolé ton code, détecté 2 choses...

    Pour facilier l'usage de la méthode je retournerais un booléen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public function isEmpty(){
    		// return $this->count( ) <= 0 ;
    		if($this->count() >= 0)
    		{
    			return false;
    		}
    		return null;
    	}
    Ici bug = tu ne testes que le premier élément de $this->collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public function equals($o){
    		foreach($this->collection as $object){
    			if($object === $o){
    				return true;
    			}
    			return false;
    		}
     
    	}
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut
    @Seb

    oui, d'ailleurs equals sert normalement à dire si l'objet courant est égal à l'objet passé en paramètre donc du coup ça ne serait-il pas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public function equals($o){
    			if($this === $o){
    				return true;
    			}
    			return false;
    	        }
    ??

    merci d'avance !

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Ah oui tiens, au vu du script j'étais parti sur un Collection->contains( )

    Plus simplement tu peux faire :

    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. l'équivalent des packeges JAVA en C/C++.
    Par rufa11 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 31/07/2012, 12h07
  2. Équivalent des fonctions C fread() et fwrite() en Java ?
    Par kar31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 17/10/2011, 17h13
  3. [SWT]équivalent des JOptionPane Swing
    Par Le Marlou dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 18/02/2004, 10h56
  4. [info]Licence des produits Java
    Par XavierZERO dans le forum Général Java
    Réponses: 12
    Dernier message: 16/01/2004, 16h27
  5. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35

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