2009-06-02 14 views
0

Ich bin zu einem neuen Webhost umgezogen, wo wir PHP 5.1 anstelle von 5.2 haben, die ich bis jetzt benutzt habe. Ich habe immer noch nicht herausgefunden, ob es eine PHP-Version oder ein Konfigurationsproblem ist.Implizite Umwandlung in String anstatt "Objekt ID # .."

Im Moment werden die meisten (oder alle) der Klassen, die __toString Funktionen haben, in "Object ID #" umgewandelt (wie in PHP4), aber bevor sie alle die korrekten Werte zurückgaben.

Wie kann ich das beheben?

+0

Können Sie mit dem Problem, das Sie haben, etwas expliziter sein? Mehr Details zu dem, was vorher passiert ist (mit 5.2) und was passiert jetzt (mit 5.1)? –

Antwort

3

Offenbar vor PHP 5.2 wurde die __toString Methode unter bestimmten Umständen nur "magisch" genannt (z. B. echo() und print()). Wenn Sie also __toString() auf eine "magische" Weise außerhalb der direkten Ausgabefunktionen verwenden, wird es nicht wie erwartet funktionieren.

Source:

Es ist erwähnenswert, dass vor PHP 5.2.0 die __toString Methode nur aufgerufen wurde, wenn es direkt mit echo() oder print() kombiniert wurde. Seit PHP 5.2.0 wird es in einem beliebigen String-Kontext aufgerufen (z. B. in printf() mit %s Modifikator), aber nicht in anderen Typen Kontexte (z. B. mit %d Modifikator). Seit PHP 5.2.0 würde das Umwandeln von Objekten ohne __toString Methode in die Zeichenfolge E_RECOVERABLE_ERROR verursachen.

+0

Ich erkannte, dass einige Ausgaben über Echo und einige als Rückgabewerte waren. Und jetzt habe ich die Support-Jungs kontaktiert, um PHP5 zu aktualisieren. Dank – Auras

+0

Kein Problem - stellen Sie sicher, dass PHP 5.2 als das ist der Cutoff. –

1

Einige Host-Firmen (wie 1and1) führen sowohl PHP 4.x und 5.x als auch standardmäßig 4.x aus. Möglicherweise müssen Sie eine .htaccess-Datei haben, die sicherstellt, dass Sie die richtige Version von PHP verwenden.

Auch die Magie __toString() unterscheidet sich geringfügig von Version 5.2+ nach dem documentation:

Es ist erwähnenswert, dass vor PHP die __toString Methode 5.2.0 nur dann aufgerufen wurde, wenn es direkt kombiniert wurde mit echo() oder drucken(). Seit PHP 5.2.0 wird es in einem beliebigen Zeichenfolgenkontext aufgerufen (z. B. in printf() mit% s-Modifikator), aber nicht in anderen Typenkontexten (z. B. mit% d-Modifizierer). Seit PHP 5.2.0 würde das Konvertieren von Objekten ohne die __toString-Methode in den String E_RECOVERABLE_ERROR verursachen.

Es kann also davon abhängen, wie Sie die Ausgabe aufrufen.

Verwandte Themen