[Php-it] Errore, bug o che? > Class entry requested for an objectwithout

Matteo C. - MIF matteo.c at mif.it
Wed Apr 4 12:10:34 CEST 2007


Cristiano Verondini ha scritto:
>    Prima di deserializzarlo, guarda se la classe che lo definisce è 
> stata inclusa.
Questo mi fa venire un dubbio. In teoria non dovrebbe nemmeno esserci il 
bisogno di avere la definizione della classe Optgroup, in quanto si deve 
verificare se l'oggetto passato è di classe Optgroup. Deve essere quindi 
solo un confronto tra il nome della classe dell'oggetto in questione 
(con la definizione di classe già inclusa) ed il parametro (nome della 
classe) passato ad "is_a()".
Per quanto riguarda la definizione della classe a cui appartengono i 
metodi che fanno queste operazioni, è sicuramente inclusa (tramite 
__autoload() ), altrimenti php darebbe errore ben prima, e comunque 
sarebbe un altro tipo di errore, se non sbaglio un qualcosa del tipo che 
avvisa che si sta utilizzando un oggetto deserializzato in modo non 
corretto, in quanto non trova la definizione della classe, o che si 
tenta di utilizzare un metodo non definito per la classe generica che 
php utilizza quando non trova la giusta definizione della classe.
>> Al momento ho risolto così:
>> <code>
>>    function add_option_group (Optgroup $opt_group) {
>>
>>        $this->_options[] = $opt_group;
>>        return true;
>>
>>    }
>> </code>
>
>    In questo modo anche se l'oggetto è generico, siccome accedi ad una 
> proprietà non viene segnalato alcun errore. 
A dire il vero se non passi un oggetto di classe Optgroup (come da 
hint), il motore d'esecuzione da errore e si ferma.
> Ovviamente le soluzioni corrette non sono quelle che 'tappano i 
> buchi', ma quelle che ti permettono di capire che cosa succede ... ;)
Sono perfettamente d'accordo. Purtroppo il tempo a disposizione non è 
sempre sufficiente per andare a fondo (non sempre nell'immediato almeno) 
a certi problemi.
In ogni caso, il controllo sulla classe con "is_a()" è stato spostato in 
un altro metodo, il quale si occupa id verificare il tipo di oggetto 
passato e di richiamare il metodo più corretto. "is_a()" è anche stato 
sostituito, come ha suggerito Domenico, dall'operatore "instanceof".
Con l'introduzione del nuovo operatore che va a sostituire il metodo 
"is_a()" non ricevo più l'errore e Apache non crasha più.
Ad un primo sguardo sembrerebbe quindi fosse proprio "is_a()" a fare 
casino in situazioni "particolari" (ancora non so quali), da 
approfondire e verificare ovviamente, magari nel sistema di bug-tracking 
di php.net.
Non so se sia mai capitato a qualcuno d'incontrare questa situazione. 
Ogni info è sicuramente d'aiuto :-)

Ciao
Teo



More information about the Php-it mailing list