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 :

Multiplication d'objet par référence [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut Multiplication d'objet par référence
    Bonjour,

    J'ai un bout de code qui me permet de mettre dans un tableau une série d'objet \Datetime.
    Par contre je viens de me rendre compte que passer le même objet fait qu'il est passé dans ce tableau par référence, ce qui ne me semble pas être le comportement normal.

    Voici mon 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
     
    $lundi = new \DateTime();
     
    $semaine = $lundi->format('W');
    $annee = $lundi->format('Y');
     
    $lundi->setISOdate($annee, $semaine);
     
    $dateTableau = array();
    $dateTableau[0] =  $lundi;
     
    for ($i = 1; $i < 7; $i++) {
     
                $lundi->add(new \DateInterval('P1D'));
                $dateTableau[$i] =  $lundi;
     
            }
     
    \Maitrepylos\Debug::dump($dateTableau);
    le debug donne ceci

    array(7) {
    [0] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [1] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [2] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [3] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [4] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [5] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [6] => object(DateTime)#17 (3) {
    ["date"] => string(19) "2012-07-01 14:58:57"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    }
    On voit bien que c'est la dernier traitement qui est passé dans l'ensemble des objet de mon tableau.

    Maintenant si je clone, j’obtiens bien le résultat attendu, mais cela me semble bizare.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         $dateTableau[0] =  clone $lundi;
     
     
            for ($i = 1; $i < 7; $i++) {
     
                $lundi->add(new \DateInterval('P1D'));
                $dateTableau[$i] =  clone $lundi;
     
            }
    array(7) {
    [0] => object(DateTime)#30 (3) {
    ["date"] => string(19) "2012-06-25 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [1] => object(DateTime)#26 (3) {
    ["date"] => string(19) "2012-06-26 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [2] => object(DateTime)#32 (3) {
    ["date"] => string(19) "2012-06-27 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [3] => object(DateTime)#33 (3) {
    ["date"] => string(19) "2012-06-28 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [4] => object(DateTime)#34 (3) {
    ["date"] => string(19) "2012-06-29 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [5] => object(DateTime)#35 (3) {
    ["date"] => string(19) "2012-06-30 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    [6] => object(DateTime)#36 (3) {
    ["date"] => string(19) "2012-07-01 15:01:25"
    ["timezone_type"] => int(3)
    ["timezone"] => string(3) "UTC"
    }
    }
    Suis-je dans l'erreur ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    c'est normale, fais un debug_zval_dump pour voir les références

    ps : fait plutôt un DatePeriod

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $period = new DatePeriod(new DateTime(), new \DateInterval('P1D'), 7);
    print_r(iterator_to_array($period));

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Nickel.

    Merci pour le \Dateperiod()

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/08/2008, 17h13
  2. [POO] Passage d'objet par référence
    Par PinGu- dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2008, 10h23
  3. [POO] Modifier attributs d'un objet par référence
    Par justSam dans le forum Langage
    Réponses: 8
    Dernier message: 22/02/2007, 07h58
  4. retour d'objet par référence...
    Par sas dans le forum C++
    Réponses: 15
    Dernier message: 28/05/2005, 17h54
  5. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28

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