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 :

[POO] Cast


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut [POO] Cast
    Bonjour,

    J'ai à nouveau un problème avec un nombre considéré comme une string.

    Dans un script, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabCibles = $objCampagne->chargerCibles();
    qui me ramène le résultat de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select cibles.id, date_format(dateRappel, '%H, %i, %s, %d, %m, %Y, 1') as dateHeureRappel from cibles, suivis where refCampagne = " . $param[0] . " and cibles.id = refCible and cloture is null and (dateRappel is null or dateRappel <= curdate()) and occupe is null
    Ensuite, plus loin, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabCiblesDuJour[] = $tabCibles[$cpt]['id'];
    . Encore un peu plus loin, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objCible = new CCible($tabCiblesDuJour[0]);
    .

    Voici le constructeur de ma classe CCible (comprenant un echo pour debug) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function __construct($tab = null)
       {
        if(count($tab) > 1)              //Si plusieurs données sont connues, l'objet est créé en affectant les différentes variables
          $this->setAll($tab);
        elseif(count($tab) == 1)         //Si uniquement l'ID est passé, les données sont tout d'abord recherchées, puis seulement les variables sont affectées
          {$this->chargerDonnees($tab[0]); echo $tab[0];}
       }
    Lorsque mon id provenant de ma requête vaut 10, mon me donne 1.

    Même en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (int) $tabCiblesDuJour[] = $tabCibles[$cpt]['id'];
    , cela ne change rien.

    Je ne vois pas comment résoudre mon problème.

    Quelqu'un a t-il une idée?

    Merci d'avance pour vos réponses.

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Essaye la fonction intval qui renvoie la valeure entiere d'une chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabCiblesDuJour[] = intval($tabCibles[$cpt]['id']);

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    sauf erreur de ma part, $tabCibles[$cpt]['id'] est un entier. Donc $tabCiblesDuJour[0] est un entier. Donc dans ton constructeur, $tab est un entier et pas un tableau.

    Donc lorsque tu fais $tab[0], ton script considère que $tab comme une chaine de caractère et t'en renvoie le premier élément, c'est-à-dire le premier caractère.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci beaucoup pour ta réponse...

    En effet, ça me semble logique. Entre-temps, voici comment j'avais résolu mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function __construct($tab = NULL)
       {
        if(count($tab) > 1)              //Si plusieurs données sont connues, l'objet est créé en affectant les différentes variables
         $this->setAll($tab);
        elseif(count($tab) == 1)         //Si uniquement l'ID est passé, les données sont tout d'abord recherchées, puis seulement les variables sont affectées
         {
           if(is_int($tab[0]))
            $this->chargerDonnees($tab[0]);
           else
            $this->chargerDonnees($tab); // Dans le cas où il y a un problème de casting et que $tab[0] est considéré comme du string 
         }
       }

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

Discussions similaires

  1. [POO] héritage et cast
    Par mikekiche dans le forum Langage
    Réponses: 8
    Dernier message: 04/08/2010, 10h11
  2. [POO] Cast d'objet vers une classe
    Par karl3i dans le forum Langage
    Réponses: 9
    Dernier message: 27/07/2009, 10h12
  3. [POO] Erreur suite à un cast sur un objet
    Par RogerB dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2006, 13h56
  4. CAST DATETIME ----> SMALLDATETIME
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2003, 12h07
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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