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 :

[PHP 5.1.6] Problème de cast string


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de maKyo
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Points : 55
    Points
    55
    Par défaut [PHP 5.1.6] Problème de cast string
    Bonjour,

    J'ai un problème de casting, et je ne vois pas qu'elle extension activer pour le résoudre :

    voici un exemple pour expliquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class test {
     private $v;
     public function __construct($v){
      $this->v = $v;
     }
     public function toString(){
      return $this->v;
     }
    }
     
    $temp = new test (1);
    $var = (string) $temp;
    -> echo $var donne "Object #29";

    On utilise le framework de zend, aucun problème sur une version 5.2.3, le cast (string) fait bien appel à la méthode toString mais sur le serveur concerné, cela provoque des erreurs forcément.

    On pensait qu'il fallait activer mbstring mais il n'est pas chargé sur le serveur où tout va bien.

    Est-ce du à la version de php ?
    Ou faut il chargé quelque chose de spéciale ?
    Ou il y a moyen d'indiquer que lors du cast (string) il doit faire appel à la méthode toString ?

    maKyo

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 292
    Points
    292
    Par défaut
    la méthode toString s'ecrit de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function __toString(){}

  3. #3
    Membre du Club Avatar de maKyo
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    ah ! sorry je complète mon exemple, en effet dans la source il y a les 2 fonctions :

    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
     
    class test {
     private $v;
     public function __construct($v){
      $this->v = $v;
     }
     public function toString(){
      return $this->v;
     }
     public function __toString(){
     	return $this->toString();
     }
    }
     
    $temp = new test (1);
    $var = (string) $temp;
    -> echo $var donne "Object #29";

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Le problème doit sans doute résider dans le fait que __toString() est appelé lorsqu'on tente d'assimiler l'objet à une chaîne de caractères. Or, dans le cas présent, on tente de renvoyer un nombre entier. Je pense qu'une simple conversion devrait résoudre le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public function __toString(){
         return (string) $this->toString();
     }
    Nicolas .

    Edit : Voire même mieux: effectuer la correction dans la "première" fonction toString() (ce qui affectera également __toString()):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function toString(){
      return (string) $this->v;
     }

  5. #5
    Membre du Club Avatar de maKyo
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    ok, j'ai changé. Mais j'ai toujours le problème.
    Pire : j'ai placé une string dans la variable.

    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
     
    class test {
     private $v;
     public function __construct($v){
      $this->v = $v;
     }
     public function toString(){
      return (string)$this->v;
     }
     public function __toString(){
     	return $this->toString();
     }
    }
     
    $temp = new test ('chaine');
    $var = (string) $temp;
    J'ai toujours mon "Object id #..."

    Par contre, j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $temp = new test ('chaine');
    echo $temp;
    donne bien "chaine" !
    Par contre si je cast l'objet -> retourne "Objet ..."

    ok, bon en 5.2.3 ça fonctionne, pour moi le problème est bien lié à la version de php et ce que l'on s'attend à avoir comme fonctionnement.
    Je vois pas d'autre explication.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    En effet, il semble bien que ce soit lié à la version de PHP. Je n'avais pas vu que tu utilisais la version 5.1.6.

    Voici un extrait de la doc officielle :

    Il est important de noter qu'avant PHP 5.2.0, la méthode __toString n'était appelée que si elle était directement combinée avec echo() ou print().
    En gros, comme tu l'as bien expérimenté, il faut directement faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(new Test('chaine'));
    (ou passer juste par une variable intermédiaire)

    Nicolas .

  7. #7
    Membre du Club Avatar de maKyo
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    ok ! merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/12/2009, 11h52
  2. [JSON] Problème de Cast Array en String
    Par helter_skelter dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/10/2009, 12h02
  3. Problème de cast en transformant un Vector en tableau de String
    Par montabou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/11/2006, 18h58
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

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