conversione implicita a stringa invece di ottenere “Object ID # ..”
Domanda
Ho trasferito in un nuovo hosting erano abbiamo PHP 5.1 invece di 5.2 che ho usato fino ad ora. Non ho ancora capito se si tratta di un problema di versione di PHP o la configurazione.
In questo momento la maggior parte (o tutte) delle classi che hanno funzioni __toString Converti in "Object ID #" (come in PHP4), ma prima che tutti restituiti i valori corretti.
Come posso risolvere questo problema?
Soluzione
Apparentemente prima PHP 5.2 metodo __toString
era solo "magicamente" chiamato in certe circostanze (ad esempio echo()
e print()
). Quindi, se si sta utilizzando __toString()
in maniera "magica" al di fuori delle funzioni di uscita dirette non funzionerà come previsto.
Fonte :
Vale la pena notare che prima di PHP 5.2.0 il metodo
__toString
stato chiamato solo quando è stata direttamente associata conecho()
oprint()
. Dal momento che PHP 5.2.0, viene chiamato in qualsiasi contesto stringa (per esempio inprintf()
con%s
modificatore), ma non in altri tipi contesti (per esempio con modificatore%d
). Dal PHP 5.2.0, oggetti conversione senza metodo__toString
a stringa causerebbeE_RECOVERABLE_ERROR
.
Altri suggerimenti
Alcune aziende ospitanti (come 1and1) corrono sia 4.x PHP e 5.xe default 4.x. Potrebbe essere necessario disporre di un file .htaccess che assicura che si sta utilizzando la versione corretta di PHP.
Inoltre, il metodo magico __toString () è leggermente diversa dalla versione 5.2+ secondo il documentazione :
Si noti che prima PHP 5.2.0 il metodo __toString stato chiamato solo quando è stata direttamente associata alle echo () o stampa (). Dal PHP 5.2.0, viene chiamato in qualsiasi contesto stringa (per esempio in printf () con modificatore% s), ma non in altri contesti tipo (per esempio con% d modificatore). Dal PHP 5.2.0, convertendo oggetti senza metodo __toString a stringa causerebbe E_RECOVERABLE_ERROR.
Quindi, si può dipendere da come si sta chiamando l'uscita.