2009-06-02 7 views
0

Je suis passé à un nouvel hébergeur si nous avions PHP 5.1 à la place de 5.2 que j'utilisais jusqu'à présent. Je n'ai toujours pas compris s'il s'agit d'une version php ou d'un problème de configuration.Conversion implicite en chaîne au lieu d'obtenir "ID d'objet #"

À l'heure actuelle, la plupart (ou la totalité) des classes qui ont des fonctions __toString sont converties en «Object ID #» (comme dans php4) mais avant qu'elles ne renvoient toutes les bonnes valeurs.

Comment puis-je résoudre ce problème?

+0

Pouvez-vous être un peu plus explicite avec le problème que vous rencontrez? Plus de détails sur ce qui est arrivé avant (avec 5.2) et que se passe-t-il maintenant (avec 5.1)? –

Répondre

3

Apparemment avant PHP 5.2 la méthode __toString n'était appelée "magiquement" que dans certaines circonstances (par exemple echo() et print()). Donc, si vous utilisez actuellement __toString() d'une manière "magique" en dehors des fonctions de sortie directes, cela ne fonctionnera pas comme prévu.

Source:

Il est intéressant de noter que, avant PHP 5.2.0 la méthode __toString n'a été appelé quand il était directement combiné avec echo() ou print(). Depuis PHP 5.2.0, il est appelé dans n'importe quel contexte de chaîne (par exemple dans printf() avec le modificateur %s ) mais pas dans d'autres contextes (par exemple avec le modificateur %d). Depuis PHP 5.2.0, la conversion des objets sans la méthode __toString à la chaîne provoquerait E_RECOVERABLE_ERROR.

+0

J'ai réalisé que certaines sorties étaient via l'écho et d'autres comme valeurs retournées. Et maintenant j'ai contacté les gars de support pour mettre à jour php5. Merci – Auras

+0

Pas un problème - assurez-vous que son PHP 5.2 que c'est la coupure. –

1

Certaines sociétés hôtes (comme 1and1) exécutent à la fois PHP 4.x et 5.x et par défaut à 4.x. Vous devrez peut-être avoir un fichier .htaccess qui vous assure que vous utilisez la bonne version de PHP.

De plus, la magie __toString() est légèrement différente de la version 5.2+ selon la documentation:

Il est intéressant de noter que, avant PHP 5.2.0 la méthode __toString n'a été appelé quand il était directement combiné avec echo() ou print(). Depuis PHP 5.2.0, il est appelé dans n'importe quel contexte de chaîne (par exemple dans printf() avec le modificateur% s) mais pas dans d'autres contextes de types (par exemple avec le modificateur% d). Depuis PHP 5.2.0, la conversion d'objets sans la méthode __toString en chaîne provoquerait E_RECOVERABLE_ERROR.

Ainsi, cela peut dépendre de la manière dont vous appelez la sortie.

Questions connexes