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 :

[Tableaux] Gestion tableau dans une classe


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 153
    Par défaut [Tableaux] Gestion tableau dans une classe
    bonsoir

    voici ma méthode : (tiréé de la classe cart de webcart.com)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function add_item($itemid,$qty=1,$price = FALSE, $info = FALSE, $datej = FALSE)
    	{ // adds an item to cart
     
    			$this->items[]=$itemid;
    			$this->itemqtys[$itemid] = $qty;
    			$this->itemprices[$itemid] = $price;
    			$this->iteminfo[$itemid] = $info;
    			$this->itemdate[$itemid] = $datej;
    			$this->itemcount++;
    		//}
     }
    j'appelle cette classe via:
    ${'ka'}->add_item($product['id'],1,$product['price'],$product['code'],$datelib);

    "ka" étant une session de mon panier.

    je ne comprends pas pourquoi lorsque j'ai deux produits avec le même ID, la méthode met à jour chaque item[id] avec les même valeurs INFO, DATEJ que celle le produit ajouté.

    en fait,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->items[]=$itemid;
    concatenne deux items identiques
    et donc modifie la valeur du precedent item

    que dois je faire ??
    array_push ne change rien ..

    merci

    (j'espère être clair)

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lolodev
    en fait,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->items[]=$itemid;
    concatenne deux items identiques
    et donc modifie la valeur du precedent item

    que dois je faire ??
    array_push ne change rien ..
    Comment ça "concatène" ? (on parle de concaténation pour des châines de caractères)
    La commande $items[ ] = $itemid *empîle* $itemid sur le tableau $items.

    je ne comprends pas pourquoi lorsque j'ai deux produits avec le même ID, la méthode met à jour chaque item[id] avec les même valeurs INFO, DATEJ que celle le produit ajouté.
    Je ne vois pas de item[id] dans le snippet fourni.
    Mais tu veux peut-être dire que qque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $panier->add_item(123, 1) ;
    $panier->add_item(123, 1) ;
    Ne donne pas une quantité de l'article #123 à 2 mais à 1, est-ce cela ? Auquel cas c'est "normal", le script est fait comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->itemqtys[$itemid] = $qty;

    PS :

    "ka" étant une session de mon panier.
    Y'a-t-il un intérêt à procéder de la sorte ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 153
    Par défaut
    oui et même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $panier->add_item(123, 1, p1) ;
    $panier->add_item(123, 1,p2) ;
    et mon pb : lorsque je lis $panier, le nombre d'element du panier est bien egale à 2, mais le code produit de l'element 1 à été modifie par p2.

    pourquoi le code du premier element a t il ete modifié ?

    (le fait de la quantité qui n'increment pas est normal, c'est un choix que j'ai fait)

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lolodev
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $panier->add_item(123, 1, p1) ;
    $panier->add_item(123, 1,p2) ;
    et mon pb : lorsque je lis $panier, le nombre d'element du panier est bien egale à 2, mais le code produit de l'element 1 à été modifie par p2.
    Parceque itemcount a été incrémenté, mais en réalité il n'y en a qu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->items[]=$itemid;
    $this->itemqtys[$itemid] = $qty;
    Après les deux add_item( ) $this->items vaut [ 123, 123 ], $this->itemqtys vaut [ 123 => 1 ].
    => C'est incohérent.
    N'hésite pas à explorer ton instance avec print_r( ) / var_dump( ) afin de bien comprendre comment elle fonctionne.

    pourquoi le code du premier element a t il ete modifié ?
    Le principe est le même que présenté plus haut : tu identifies tes articles avec un ID, à chaque ajout l'éventuelle entrée précédente est écrasée par la nouvelle.
    Que voudrais-tu avoir au final ?

    Si je puis me permettre, à ta place je reverrai le fonctionnement du script qui ne m'a pas l'air très souple tel quel.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 153
    Par défaut
    bj

    j'avoue avoir du mal à comprendre ce phénomène ...
    tu identifies tes articles avec un ID, à chaque ajout l'éventuelle entrée précédente est écrasée par la nouvelle.
    Que voudrais-tu avoir au final ?
    mais celà n'est valable que si ID existe déjà dans la tableau
    Que voudrais-tu avoir au final ?
    et bien lorsque j'ajoute un ID qui existe déjà dans mon tableau item[], je veux qu'il ne modifie pas les autres ID et qu'il l'ajoute come un ID différent

    merci

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lolodev
    celà n'est valable que si ID existe déjà dans la tableauet bien lorsque j'ajoute un ID qui existe déjà dans mon tableau item[]
    C'est bien là le fond du pb. Mais comment se fait-il que tu veuilles avoir deux fois le même produit au sein du panier ? Ne serait-il pas plus pertinent d'incrémenter la quantité de l'existant ?

    je veux qu'il ne modifie pas les autres ID et qu'il l'ajoute come un ID différent
    C'est impossible avec la structure que tu as adopté puisque tu références les quantités et d'autres propriétés avec l'ID.

    Pour éviter ce genre de conflit il faudrait TOUT regrouper au sein du même tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function add_item(...)
    {
        $this->items[ ] = array('id' => $id, 'qty' => ...) ;
    }

Discussions similaires

  1. Initialisation d'un tableau dans une classe
    Par Invité dans le forum C#
    Réponses: 5
    Dernier message: 26/04/2009, 11h14
  2. Réponses: 4
    Dernier message: 09/06/2008, 16h32
  3. [Tableaux] Déclaration d'un tableau dans une classe
    Par rochenico dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2006, 11h29
  4. Comment définir un tableau dans une classe?
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 30/04/2006, 20h34
  5. tableau dans une classe
    Par blastmanu dans le forum C++
    Réponses: 6
    Dernier message: 18/04/2006, 14h18

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