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 :

Object of class -> string


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut Object of class -> string
    Bonjour,
    J'ai fait une class pour apprendre un peu le contrôle return.
    Voici ma class (class.php) :
    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
    <?php
    class testClass
    {
     
     
     
     
    	public function add($arg) {
        $arg = $arg + 1;
    	//return ; //meme erreur
    	//return $arg;//meme erreur
    	return (string)$arg;//meme erreur
    	}
     
     
     
     
    }
    et voici mon fichier test.php
    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
    include_once ('class.php');
     
     
     
    $obj = new testClass();
     
     
    $nombre = 2;
    echo '<p>' .$nombre . '</p>';
     
    $obj->add($nombre);
     
    $total = $obj;
     
    //var_dump($total); // object(testClass)[1]
    //print_r($total);    // testClass Object ( )
     
    echo $total; //meme erreur
    echo (string)$total; //meme erreur
    alors j'ai l'erreur fatale :
    Catchable fatal error: Object of class testClass could not be converted to string in C:\biblio\class.Objet\test.php on line 20
    Alors comment je peux trouver la valeur de ma variable $total ?
    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas l'objet entier que tu fait afficher c'est le seulement la méthode add()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    class testClass {
    	public function add($arg) {
                  return ++$arg;
    	}
    }
     
    $obj = new testClass();
    echo $obj->add(4);
    Mais on utilisera plutôt une méthode pour afficher à partir de la classe :
    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
    <?php
    class testClass {
     
           private $total = 0;
     
    	public function inc() {
                  ++$this->total;
    	}
     
    	public function affiche_total() {
                 echo $this->total;
    	}
    }
     
    $obj = new testClass();
    $obj->inc();
    $obj->affiche_total();
    Pour la culture on peut évoquer la méthode magique __toString qui gère l'utilisation de l'objet comme une chaine de caractère :
    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
    <?php
    class testClass {
     
           private $total = 0;
     
    	public function inc() {
                  ++$this->total;
    	}
     
        public function __toString()
        {
            return (string)$this->total;
        }
    }
     
    $obj = new testClass();
    $obj->inc();
    echo $obj;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ce n'est pas l'objet entier que tu fait afficher c'est le seulement la méthode add()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    class testClass {
    	public function add($arg) {
                  return ++$arg;
    	}
    }
     
    $obj = new testClass();
    echo $obj->add(4);
    Bonjour Sabotage,
    Merci et je pense que j'ai bien appris ce que tu m'as écrit.
    J'ai ajouté 1 nouvelle fonction (vraiFaux) pour savoir si je peux aussi récupérer les conditions v/f.
    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
    header( 'content-type: text/html; charset=utf-8' );
    class testClass
    {
     
     
     
     
    	public function mulplePar2($arg) {
        $arg = $arg *2;
    	return $arg;
    		}
     
     
    	public function add($arg) {
        return ++$arg;
    	}
     
     
     
    	public function vraiFaux($arg) {
    	if ($arg >= 10)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
     
    }
     
     
     
     
    }
     
    $obj = new testClass();
     
     
    $nombre = 10;
    echo '<p> nombre : ' .$nombre . '</p>';
     
    $obj->mulplePar2($nombre);
     
     
     
    echo 'ajout 1 au chiffre "8" : ' . $obj->add(8);
     
    echo '<br>le chiffre "9" est multipliée par 2 : ' . $obj->mulplePar2(9);
    echo '<br> la variable, "nombre" est multipliée par 2 :  ' . $obj->mulplePar2($nombre);
     
     
    $total_mulplePar2 = $obj->mulplePar2($nombre);
    $total_add = $obj->add($nombre);
     
     
     
     
    echo '<br><br>ajout "1" à la variable, "nombre" : ' . $total_add;
     
    echo '<br> la variable, "nombre", est multipliée par 2 :  ' . $total_mulplePar2;
     
     
     
     
     
     
     
    $total_v_f = $obj->vraiFaux($total_mulplePar2);
     
    if ($total_v_f == 1) // vrais
    	{
    		echo '<p> la variable, "$ total_mulplePar2" (= [' .$total_mulplePar2 . ']), est plus grand que 10 (ou égale à 10)  </p>';
    	}
    	else // 0 false
    	{
    		echo '<p> la variable, "$ total_mulplePar2" (= [' .$total_mulplePar2 . ']), est plus petit que 10  </p>';
    	}
    ça marche :
    nombre : 10

    ajout 1 au chiffre "8" : 9
    le chiffre "9" est multipliée par 2 : 18
    la variable, "nombre" est multipliée par 2 : 20

    ajout "1" à la variable, "nombre" : 11
    la variable, "nombre", est multipliée par 2 : 20
    la variable, "$ total_mulplePar2" (= [20]), est plus grand que 10 (ou égale à 10)
    Est-ce que j'ai bien écrit ma nouvelle fonction ?
    Est-ce que j'ai oublié quelques choses ?

    Merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux simplement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function vraiFaux($arg) {
    	return  $arg >= 10;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Mais on utilisera plutôt une méthode pour afficher à partir de la classe :
    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
    <?php
    class testClass {
     
           private $total = 0;
     
    	public function inc() {
                  ++$this->total;
    	}
     
    	public function affiche_total() {
                 echo $this->total;
    	}
    }
     
    $obj = new testClass();
    $obj->inc();
    $obj->affiche_total();
    C'est extraordinaire cette explication avec 2e exemple.

    Je vois qu’on peut passer une valeur d'une variable dans la 1re fonctions et ensuite utiliser la nouvelle valeur de cette variable dans une autre fonction! c'est génial! Merci
    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
    class testClass {
     
     
    	private $total = 10;
     
    	public function inc() {
                  ++$this->total;
    	}
     
    	public function affiche_total() {
                 echo $this->total;
    	}
     
     
     
     
     
     
    }
     
    $obj = new testClass();
     
     
     
    $obj->inc();
    $obj->affiche_total(); // affichage 11
    echo '<br>';
    Mais puisque la variable privée est dans la class, on ne peut pas changer sa valeur, n'est-ce pas ?
    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
    header( 'content-type: text/html; charset=utf-8' );
     
    class testClass {
     
     
    	private $total = 10;
     
    	public function inc() {
                  ++$this->total;
    	}
     
    	public function affiche_total() {
                 echo $this->total;
    	}
     
     
    	public function __toString()
        {
            return (string)$this->total;
        }
     
     
     
    }
     
    $obj = new testClass();
     
     
     
    $obj->inc();
    $obj->affiche_total(); // affichage 11
    echo '<br>';
     
     
     
     
     
     
     
     
    $nombre = 100;
    $obj->inc($nombre);
    echo $obj;//// affichage 21      // totp
    echo '<br>';

  6. #6
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par sabotage Voir le message

    Pour la culture on peut évoquer la méthode magique __toString qui gère l'utilisation de l'objet comme une chaine de caractère :
    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
    <?php
    class testClass {
     
           private $total = 0;
     
    	public function inc() {
                  ++$this->total;
    	}
     
        public function __toString()
        {
            return (string)$this->total;
        }
    }
     
    $obj = new testClass();
    $obj->inc();
    echo $obj;
    La Méthode magique [__toString] c'est intéressant, mais je n'arrive pas comprendre son utilité. Mais grâce à cette méthode mon code marche (voir la ligne 56 ci-dessous)
    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
    class testClass {
    	public function add($arg) {
                  return ++$arg;
    	}
     
     
     
     
    	//2 ----------------------------------------------
     
    	private $total = 10;
     
    	public function inc() {
                  ++$this->total;
    	}
     
    	public function affiche_total() {
                 echo $this->total;
    	}
     
     
    	////3 ----------------------------------------------
     
    	private $total2 = 20;
     
    	public function inc2() {
                  ++$this->total2;
    	}
     
        public function __toString()
        {
            return (string)$this->total2;
        }
     
     
     
     
    }
     
    $obj = new testClass();
    echo $obj->add(4); // affichage 5
    echo '<br>';
     
     
    //2 ----------------------------------------------
     
    $obj->inc();
    $obj->affiche_total(); // affichage 11
    echo '<br>';
     
     
     
    //3  string toto  ----------------------------------------------
     
    $obj->inc2();
    echo $obj;//// affichage 21   // totp Catchable fatal error: Object of class testClass could not be converted to string
    echo '<br>'; 
     
     
     
     
     
    //2 a avec variable $nombre  ----------------------------------------------
    $nombre = 100;
    $obj->inc($nombre);
    echo $obj;//// affichage 21      // totp
    echo '<br>'; 
     
     
     
    //3 a avec variable $nombre2  ----------------------------------------------
     
    $nombre2 = 50;
    $obj->inc2($nombre2);
    echo $obj;//// affichage 22    totq
    echo '<br>';

  7. #7
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    bon ok puisque...
    Je mets "resolu"...

    merci
    bonne journée

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mais puisque la variable privée est dans la class, on ne peut pas changer sa valeur, n'est-ce pas ?
    "Private" signifie que la propriété ne peut pas être accedée en dehors de la classe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2008, 22h21
  2. Réponses: 2
    Dernier message: 14/02/2008, 17h21
  3. Réponses: 1
    Dernier message: 14/01/2008, 17h41
  4. [PEAR][Net_Traceroute] Object of class could not be converted to string
    Par nicoxweb dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 15/12/2007, 13h21
  5. [PEAR] Sigma: "Object of class PEAR_Error could not be converted to string"
    Par onet dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/09/2007, 14h31

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