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] Erreur avec la fonction __toString()


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut [POO] Erreur avec la fonction __toString()
    Salut,

    Je suis en train d'écrire mon script PHP pour réaliser l'autocomplétion d'un champ... (le lien et le dossier contenant un exemple d'autocomplétion siont à cette adresse)

    Mon problème vient de l'instruction stripos. L'erreur qui m'est renvoyée (merci FireBug) est que "stripos() expects parameter 1 to be string, null given !"

    Pourtant mon "deplacements" est Array et ne devrait contenir que des strings

    code 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     
    $base = realpath("base_test.mdb");
    $table = "constructeurs"; 
    $column = "nom_constructeur";
    //$test = utf8_decode('olé');
     
    $DB_Connexion = new COM("ADODB.Connection");
    $DB_ConnexionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" . $base . ";";
    $DB_Connexion->open($DB_ConnexionString);
     
    $sql = "SELECT " . $column . " FROM " . $table . " ORDER BY " . $column . " ASC;";
    $RS = $DB_Connexion->execute($sql);
     
     
    $i = 0;
    while(!$RS -> EOF) {
    	$deplacements[$i] = $RS -> fields[0];
    	$RS -> MoveNext();
    	$i = $i + 1;
    	}
     
     
    echo "<ul>\n";
    foreach ($deplacements as $departement) {
        if (stripos($departement, $_POST['departement']) === 0) {
            echo "    <li>$departement</li>\n";
        	}
    	}
    echo "</ul>";
     
     
     
    $RS -> Close();
    $DB_Connexion -> Close();
     
    ?>
    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Apparemment, il existe une fonction __toString() qui peut convertir un object en string !

    je l'utilise à travers la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $browser[$i] = $browser[$i].__toString();
    Il m'affiche le message d'erreur "Call to undefined function __toString()"

    Que faut-il pour utiliser cette fonction ?

  3. #3
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonjour,
    As tu effectué une recherche dans le Manuel PHP, car apparemment cette fonction n'existe pas ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    C'est exact !!

    Mais alors, comment convertir un Object en String !!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    La fonction magique __toString() est appelé automatique lorsque que l'on tente d'affiche l'objet par exemple en faisant un :
    Il faut donc l'implémenter dans ta classe pour quelle renvoie quelque chose car par défault elle ne renvoit qu'une chaine vide. Donc ton implémentation de cette fonction il suffit de renvoyer une chaine de caractères de ce que tu veux affiché
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function __toString(){
     return get_class($this);
    }
    renverra le nom de la classe. Tu peux lui faire renvoyer ce que tu veux mais il faut implémenter la fonction dans ta classe.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Merci de confirmer l'existence de cette fonction Jorael (je ne suis pas fou ). Par contre, je n'ai aps bien saisi ton histoire de classe !! Est-ce que je ne pourrais pasn simplement déclarer ma fonction __toString au début de mon code PHP ??

    Seulement je ne sias pas quoi mettre (je n'ai pas compris ton exemple car je suis novice (voir ignorant) en classe )

    code 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
    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
    <?php
     
    function __toString() {
    	return ;
    	}
     
    $base = realpath("base_test.mdb");
     
    $constructeurs = array(
    	'constructeurs',
    	'nom_constructeur',
    );
     
    $DB_Connexion = new COM("ADODB.Connection");
    $DB_ConnexionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" . $base . ";";
    $DB_Connexion->open($DB_ConnexionString);
     
    $sql = "SELECT " . $constructeurs[1] . " FROM " . $constructeurs[0] . " ORDER BY " . $constructeurs[1] . " ASC;";
    $RS = $DB_Connexion->execute($sql);
     
     
    $i = 0;
    while(!$RS -> EOF) {
    	$browser[$i] = $RS -> fields[0];
    	$browser[$i] = $browser[$i].__toString();
    	$RS -> MoveNext();
    	$i = $i++;
    	}
     
     
    echo "<ul>\n";
    foreach ($browser as $departement) {
    	echo $departement;
        if (stripos($departement, $_POST['departement']) === 0) {
            echo "    <li>$departement</li>\n";
        	}
    	}
    echo "</ul>";
     
     
     
    $RS -> Close();
    $DB_Connexion -> Close();
     
    ?>

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 67
    Points
    67
    Par défaut
    Php fait la conversion automatiquement non?

    Il te suffirai de prendre "".$maVariable."" et php te la convertira en string.



    Je me trompe?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    qu'est-ce que tu entends en terme de synthaxe par

    pour convertir (dans mon cas) $browser[$i] en string ?

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Points : 54
    Points
    54
    Par défaut
    Voici un exemple très simple (et un code très simplifier) d'une utilisation de la méthode __toString(). Rien ne vaut un bon exemple :

    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
     
    <?php
    class Personne{
     
    private nom;
    private prenom;
     
    public function __construct($unNom,$unPrenom){
    //le code
    }
     
    public function __toString(){
    $etat = new String();
    $etat = 'je suis '.$this->prenom.' '.$this->nom.' !!!';
    return $etat;
     
    }
    }
     
    $john = new Personne('DOE','John');
    $xxx = new Personne('X','Mister');
     
    echo $john; //appel de la méthode __toString //affiche : je suis John DOE !!!
     
    echo $xxx; //affiche : je suis Mister X !!!
    ?>
    La méthode __toString() d'une classe est appelée lorsque un objet de cette classe fait l'objet d'un echo ou d'un print

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2006
    Messages : 63
    Points : 67
    Points
    67
    Par défaut
    simplement en concaténant 2 objets dont une chaine de caractère, tu obtiens un string, et certes, l'écho le convertis automatiquement.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    AntaresJon, j'ai maintenant compris comment tu procèdes mais cela ne marche pas car l'erreur : "Object of class variant could not be converted to String" persiste !

    Des modifications sont elles à entreprendre sur la base de données ?

    Je vais essayé la méthode __toString() de Taka-kun ... pour voir s'il y a du nouveau...

    Merci

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Taka-kun, il semble que je ne possède pas la classe String() puisque'il me renvoit l'erreur : "Class 'String' not found" !

    Le ptit bout de 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
     
    		class Results {
     
    		private $result;
     
    		public function __construct($BASE,$TABLE,$COLUMN,$DATA,$ID) {
    			$DB_Connexion = new COM("ADODB.Connection");
    			$DB_ConnexionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" . $BASE . ";";
    			$DB_Connexion -> open($DB_ConnexionString);
    			$sql = "SELECT " . $ID . " FROM " . $TABLE . " WHERE " . $COLUMN . " = '" . $DATA . "';";
    			$result = $DB_Connexion -> execute($sql);
    			return $result;
    			}
     
    		public function __toString() {
    			$etat = new String();
    			$etat = ''.$this->result.'';
    			return $etat;
    			}
    		}
     
    		$base = realpath("base_test.mdb");
    		$table = 'deplacements';
    		$column = 'nom_deplacement';
    		$data = 'Courir';
    		$id = 'id_deplacement';
     
    		$res = new Results($base,$table,$column,$data,$id);
     
    		echo $res;
     
    		//$RS -> Close();
    		$DB_Connexion -> Close();
     
    ?>
    Merci d'avance

  13. #13
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Ca fonctionne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function __toString() {
        return $this->result;
    }
    Pour faire ce code ci-dessus, il faudrait une classe String.
    Es-tu sûr que $RS est un objet ResultSet ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(!$RS -> EOF) {
    	$deplacements[$i] = $RS -> fields[0];
    	$RS -> MoveNext();
    	$i = $i + 1;
    }

  14. #14
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    on va remettre les choses à plat si tu le veux bien

    la question primordiale : que veux tu afficher?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Je cherche à afficher des données provanant de ma Base De Données Access...
    Lorsque je les extrait via la commande SELECT et que je réalise un gettype( ) il m'affiche un type object !
    Lorsque j'utiklise la fonction stripos( , ), il me renvoit l'erreur comme quoi mes données ne sont pas de type String (ce qui reste logique puisque de type Object)
    Je cherche donc à convertir Object - to - String de manière à pouvoir afficher mes données !

    Voilà

  16. #16
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    ils nous faudrait savoir de quel type d'objet il s'agit. quelle classe qui contient quel méthodes et quelle variables !

    Un objet ce n'est pas un simple type de données! c'est tout une logique de fonctionnement qui est induit. Un objet, c'est un objet quoi

    l'objet, c'est la lampe, ce que tu veux afficher c'est la lumière. sauf que dans tout çà, il y à les branchements, il y à l'électricité et tout. Toi tu veux transformer ta lampe en lumière! donc forcément la méthode __tostring() ne va renvoyer que du vent.

    la variable qui est un objet traite là de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<pre>";
    var_dump($tavariable);
    echo "</pre>";
    et dit nous ce qui l'en est

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Si j'éxécute ce que les 3 lignes de code que tu m'as fourni, j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object(variant)#2 (0) {
    }

  18. #18
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    variant, ce ne serait pas un type de données d'Access du genre : chaîne de caractère à longueur variable ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    J'ai trouvé ça sur le net :

    Variant (type de données Variant : type de données par défaut des variables qui n'ont pas de caractères de déclaration de type lorsqu'une instruction Deftype n'est pas en vigueur. Une valeur de type Variant peut stocker des données numériques, de chaîne, de date et d'heure, Null ou Empty.)

  20. #20
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(!$RS -> EOF) {
    	$deplacements[$i] = $RS -> fields[0]->Value;
    	$RS -> MoveNext();
    	$i = $i + 1;
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [1.x] Erreur incompréhensible : avec la fonction __toString()
    Par Malonix dans le forum Symfony
    Réponses: 3
    Dernier message: 01/07/2009, 12h15
  2. [XSLT] erreur avec les fonctions
    Par frouge dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 18/07/2006, 10h15
  3. [Mail] erreur avec utilisation fonction mail
    Par taka10 dans le forum Langage
    Réponses: 7
    Dernier message: 12/07/2006, 16h19
  4. [POO] Pb avec les fonctions xml et la POO
    Par QuantuX dans le forum Langage
    Réponses: 1
    Dernier message: 17/06/2006, 14h54
  5. erreur avec la fonction putfile() sur connexion FTP
    Par stefane1981 dans le forum C++
    Réponses: 2
    Dernier message: 23/09/2005, 09h13

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