Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-11-2008 23:09:07

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

__PHP_Incomplete_Class

Bonjour

Est-ce que quelqu'un a déjà eu cette erreur ?

Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in /home/julien/public_html/MyZend/Zend/Locale.php on line 834

De quoi est-ce que cela peut provenir.
Le plus étrange c'est que ça ne se produit pas tout le temps.


Julien

Hors ligne

 

#2 02-11-2008 09:17:24

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: __PHP_Incomplete_Class

Hello,

Quelle version de PHP et du ZF ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 02-11-2008 10:21:59

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: __PHP_Incomplete_Class

PHP 5.2.6
ZF 1.7 PR

C'est peut-être à cause de la version ZF ? Mais alors pourquoi cela ne se produit pas à tout les coups ?


Julien

Hors ligne

 

#4 02-11-2008 10:48:38

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: __PHP_Incomplete_Class

Hello,

C'est une preview release. Il y a beaucoup de changement sur le trunk depuis la sortie de la 1.7PR concernant Zend_Locale. Essayes de te brancher sur le trunk SVN ou attends la 1.7RC qui ne devrait plus tardé.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 02-11-2008 19:02:06

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: __PHP_Incomplete_Class

ce la vient du fait que tu as mis en session un objet et que lorsque tu ouvre la session ensuite tu n'as pas chargé la classe.
Solution 1)  (ma préféré) tu convertis ton objet en stdClass object  avant de le mettre en session ainsi il peut voyager n'importe où (session échange de donnée sérialisés enregistrement dans un fichier etc.) on ne garde que les valeurs. mais tu perds la classe lorsque tu le récupère il te faut donc recréer l'instance si nécessaire.

Solution 2) mettre en marche le système autoload de Zend. la classe est chargée automatiquement par Zend à l'ouverture de la session et l'objet retrouve sa classe d'origine. Mais la classe sera systématiquement chargé même si tu ne t'en sert pas dans l'action courante. si tu ne fais pas correctement le ménage tu peut te retrouver à charger pas mal de chose inutile. (quelque soit la solution il faut toujours faire son ménage dans la session)

Solution 3) serialiser l'objet avant de le mettre en session. avantage ce n'est qu'une chaîne de caractère qui est mise ne session donc plus de pb. la chaîne est récupéré à chaque ouverture de session comme pour toute la variables. comme c'est une String pas de chargement de classe ni de message d'erreur. il faut pour utiliser l'objet charger la classe et déserialiser. deux inconvénients on fais deux serialisation et deux désérialisation. (la session en fait toujours une à l'ouverture et la fermeture) mais sur tout il n'est pas possible d'utiliser l'objet en session directement. on a donc obligatoirement une copie hors session pour l'utiliser.

les trois approche ont leur aficionados. j'utilise la première car pour moi la session est la pour garder des données pas des méthodes. mais c'est façon de voir les choses.
pour me faciliter la vie mes objets on tous une méthodes _toStdClass qui retourne une copie de l'objet ne contenant que les données. dans l'autre sens mes constructeurs accepte un stdClass object comme argument pour rétablir l'instance. (ce genre de constructeur est appelé constructeur de recopie dans la littérature de la POO)

pour avoir un stdClass object il suffit de faire
(object)get_object_vars($myObject);
A+JYT

Hors ligne

 

#6 03-11-2008 00:28:02

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: __PHP_Incomplete_Class

Si c'est pas de la réponse ça. Sekaijin m'étonnera toujours...


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#7 03-11-2008 09:58:36

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: __PHP_Incomplete_Class

Ca c'est de la réponse, merci

Je pense que je vais opter pour la solution 1 ou 2... dès que j'aurai trouvé l'endroit où je mets un objet en session, apparemment un Zend_Date dans ce cas-là. Parce que pour le moment je ne vois pas où j'ai pu faire ça


Julien

Hors ligne

 

#8 03-11-2008 10:19:32

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: __PHP_Incomplete_Class

bonjour,
Pour compléter la solution et les problèmes de mise en session d'objet:

lors de la mise en session d'un objet, il est sérialisé par php donc la methode __sleep() est appelée.

Lors du "chargement de l'objet" la methode __wakeup() est utilisé.

C'est très utile si vous avez des champs qui sont par exemple des dateTime qui ne sont pas serializable par php .

exemple :

Code:

function __sleep(){
        if ($this->date_ouverture_compte instanceof DateTime ){
            $this->date_ouverture_compte = $this->date_ouverture_compte->format(DateTime::W3C);
       ......
$reflex  = new ReflectionObject($this);
        $tableau = $reflex->getProperties();
        $retour  = array();
        foreach ($tableau as $propriete){
            $retour[] = $propriete->name;
        }
        return $retour;
}

function __wakeup(){
        $this->date_ouverture_compte = new DateTime($this->date_ouverture_compte);
....
}

ps : je suis plutot méthode 2 ;-) d'où ce bout de code

Dernière modification par ichevc02 (03-11-2008 11:41:13)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages