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 :

class Integer couldn't be converted to string [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut class Integer couldn't be converted to string
    J'ai un souci.
    Si je comprends l'anglais, je ne comprends pas la sémantique du message en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [08-Sep-2010 11:19:22] PHP Stack trace:
    [08-Sep-2010 11:19:22] PHP   1. {main}() F:\WebSites\checkform\index.php:0
    [08-Sep-2010 11:19:22] PHP   2. Form->__construct() F:\WebSites\checkform\index.php:53
    [08-Sep-2010 11:19:22] PHP   3. Form->validate() F:\WebSites\checkform\validation\validate.php:83
    [08-Sep-2010 11:19:22] PHP Catchable fatal error:  Object of class Integer could not be converted to string in F:\WebSites\checkform\validation\validate.php on line 115
    Je joins la source en pièce jointe mais cela se passe dans la deuxième source, la première si besoin....

    Donc Index.php instancie un objet de la classe Form avec pour seul élément (je teste un type à la X) qui instancie un object de type Integer et là, je me plante (les contrôles doivent être deplacés, je sais !)

    Un petit coup de main me ferait grandement plaisir

    Merci à tous.

    =========

    J'ai corrigé ma source mais toujours le même message....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [08-Sep-2010 11:44:01] PHP   2. Form->__construct() F:\WebSites\checkform\index.php:53
    [08-Sep-2010 11:44:01] PHP   3. Form->validate() F:\WebSites\checkform\validation\validate.php:83
    [08-Sep-2010 11:44:01] PHP Catchable fatal error:  Object of class Integer could not be converted to string in 
    F:\WebSites\checkform\validation\validate.php on line 117
    Nouveau validate.php e, pièce attachée.....

    Merci à tous
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut

    Tu as fais une faute de frappe à la ligne 115 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Ctl = $this->form[$i].Ctl
    D'après ton code $this->Ctl = $this->form[$i] correspond à une instance de classe Integer donc la concaténation (.Ctl) soulève une erreur vu que cela n'a pas de sens de concaténer des instances de classes.

  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
    Je comprend pas tout ce que tu fais, mais d'après le message d'erreur et la class, tu as un problème, là où il attend un string, je penses que tu lui passe un array()

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    À la lecture du message, tu n'as pas défini la méthode magique __tostring() dans ta classe Integer. Indispensable si une opération quelconque aboutit à un transtypage vers string.

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Tout à fait d'accord avec petitbidon, et Ctl n'existe pas, ni $this->Ctl puisque tu ne stockes pas le paramètre $Ctl passé au constructeur en tant que membre.

    De plus, $Ctl est un tableau, pas une chaine de caractères.

    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Ctl = $this->form[$i].Ctl
    ne fonctionnera pas car aucun membre $Ctl n'est déclaré dans la classe (ca petera un warning dont on se passerait bien).
    Et aucune constante Ctl n'existe, tu souhaiterais pas plutot faire ceci ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Ctl = $this->form[$i]->Ctl
    mais tu devras mettre ton membre $Ctl publique dans tes classes Integer/String.

    Je trouve que ton code est beaucoup trop compliqué pour pas grand chose, non ?

  6. #6
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Code compliqué
    Merci Thomas,

    Oui mais un code compliqué est souvent la caractéristique des "débutants", débutant que je pense ne plus être tout à fait mais surement pas professionnelle non plus

    Merci !

    Etienne

  7. #7
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Erreur résolue
    Merci thomas, erreur résolue mais script pas encore terminé !
    Tu sais, tu trouves peut être le code compliqué, mais j'ai recenssé 17 types de donnée.... les premiers sont les plus compliqués !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mais tu devras mettre ton membre $Ctl publique dans tes classes Integer/String.
    Pourquoi, en effet si je le laisse PRIVATE, cela ne fonctionne pas !

    Désolé d'abuser mais....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [08-Sep-2010 14:41:55] PHP Warning:  Missing argument 2 for Integer::__construct(), called in F:\WebSites\checkform\index.php on line 50 and defined in F:\WebSites\checkform\validation\validate.php on line 251
    [08-Sep-2010 14:41:55] PHP Stack trace:
    [08-Sep-2010 14:41:55] PHP   1. {main}() F:\WebSites\checkform\index.php:0
    [08-Sep-2010 14:41:55] PHP   2. Integer->__construct() F:\WebSites\checkform\index.php:50
    [08-Sep-2010 14:41:55] PHP Notice:  Undefined variable: debug in F:\WebSites\checkform\validation\validate.php on line 261
    Pige pas.... le numéro des lignes non plus dans le message......



    @+ et au plaisir de te lire
    Fichiers attachés Fichiers attachés

  8. #8
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut get_class
    Bonjour,

    Ne devrais-je pas avoir comme résultat à get_class: Integer ?

    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
    79
    								
    case				INTEGER	 : 	//user_error("String" , E_USER_NOTICE) ;
    															 	$this->Ctl = $this->form[$i]->Ctl ;
    																$int       = new Validate($this->Ctl,$this->debug) ;
    																break ;
    Ceci est exécuté															 
    								default					   :
    																break ;
    							}
    						}
    //
    //						affihage du message inférieur
    //						=============================						
     						if ($this->cntFilled == 0)
    							$this->msg = VIDE ;
    						elseif ($this->cntFilled < $this->cntField)
    							$this->msg = KO ;
    						else
    							$this->msg = OK ;
    
     					}	
    				catch (Exception $E)
     					{	Exception::exception_handler($E) ; }
    			}
    			
    			function __destruct()
    			{	 }
    
    //          ==================================	
    			public function getCntField()
    			{ 	return($this->cntField) ;	}
    			
    			public function getCntFilled()
    			{ 	return($this->cntFilled) ;	}
    
    			public function isFormValid()
    			{ 	if ($this->debug)
    					user_error("cntStack[".$this->getCntStack()."]", E_USER_NOTICE) ;
    			
    				return($this->getCntStack() == 0) ;	}       
    
    //          All Screen message area routines			
    //          ==================================	
    			public function getMsg()                   		// Public car function appelée du formulaire...
    			{	return( $this->tabMsg[$this->msg] ) ;  	}
    //          ==================================
    		}
      
    /*********************************************************************************************************************************************************
    * 	Validate constructor
    *   ====================
    */	
    class Validate extends Form implements Validator
    {	private $name, $must, $type, $minL, $maxL, $debug ;
    	const 	Name = 0 ,
    	  		Must = 1 ,
    	  		Type = 2 ,
    	  		MinL = 3 ,
    	  		MaxL = 4 ;
    	  
    /**
    * 			constructor
    *			===========
    */	
    	function __construct(array $Ctl, $debug)
    	{	$this->name   = $Ctl[self::Name] ;
    		$this->must   = $Ctl[self::Must] ; 
    		$this->type   = $Ctl[self::Type] ;
    		$this->minL   = $Ctl[self::MinL] ; 
    		$this->maxL   = $Ctl[self::MaxL] ;
    		$this->Class  = get_class($Ctl) ; 
    		
    		$this->execute() ;
    	}
    	
    	function execute()
    	{	user_error("Class[".$this->Class."] Name[".$this->name."] Must[".$this->must."] Type[".$this->type."] minL[".$this->minL."] maxL[".$this->maxL."]", 
    		E_USER_NOTICE) ;
    	}
    J'obtiens les bonnes valeurs de tous les paramètres sauf $this->Class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [08-Sep-2010 15:34:00] PHP   5. get_class() F:\WebSites\checkform\validation\validate.php:186
    [08-Sep-2010 15:34:00] PHP Notice:  Class[] Name[zip] Must[1] Type[UINT] minL[5] maxL[5] in F:\WebSites\checkform\validation\validate.php on line 193
    [08-Sep-2010 15:34:00] PHP Stack trace:
    Je comprend pas, j'ai vérifié, revérifié .... etc.....

    Merci à ceux qui m'aideront à sortir de là

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Tu aurais comme résultat "Integer", une chaine de caractères. Tu sembles faire référence à une constante INTEGER, l'as tu déclarée de cette manière ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    define('INTEGER', 'Integer');
    mais honnêtement autant faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    switch(get_class($this->form[$i])){
        case 'Integer' :
            // etc.
        break;
        case 'String' :
            // etc.
        break;
        default : 
        break;
    }

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

Discussions similaires

  1. [MySQL] Object of class ArticleDao could not be converted to string
    Par Mordikkuss dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2010, 15h49
  2. Réponses: 3
    Dernier message: 03/11/2008, 22h21
  3. Réponses: 2
    Dernier message: 14/02/2008, 17h21
  4. Réponses: 1
    Dernier message: 14/01/2008, 17h41
  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