2010-05-25 5 views
5

Dans codeigniter Im essayant d'utiliser le plugin this qui nécessite l'implémentation d'une méthode toString dans mes modèles. Ma méthode toString ne suffitphp 5.1.6 Méthode magique __toString

public function __toString() 
{ 
    return (string)$this->name; 
} 

Sur ma machine locale avec php 5.3 tout fonctionne très bien, mais sur le serveur de production avec php 5.1.6 il montre « id objet # 48 », où la valeur de la propriété du nom de cette objet devrait apparaître ..... J'ai trouvé quelque chose sur le problem here mais je ne comprends toujours pas ... Comment puis-je résoudre ce problème?

+0

Avez-vous essayé return (string) $ this-> name? – Galen

Répondre

2

Mise à jour PHP

Je suis traitant le même problème, je soupçonne que votre meilleure option sera de mettre à jour php sur le serveur de production à >= 5.2.0

Dans le futur (je suis en train d'apprendre cela à la dure), essayez de développer sur la même version que vous aurez déployer sur.

3

Pour citer le manuel:

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 type (par exemple avec le modificateur% d). Depuis PHP 5.2.0, la conversion des objets sans la méthode __toString en chaîne provoque E_RECOVERABLE_ERROR.

Je pense que vous avez appeler la méthode __toString manuellement si vous l'utilisez en PHP 5.2 < et non dans le cadre d'un écho ou impression.

7
class YourClass 
{ 
    public function __toString() 
    { 
     return $this->name; 
    } 
} 

PHP < 5.2.0

$yourObject = new YourClass(); 
echo $yourObject; // this works 
printf("%s", $yourObject); // this does not call __toString() 
echo 'Hello ' . $yourObject; // this does not call __toString() 
echo 'Hello ' . $yourObject->__toString(); // this works 
echo (string)$yourObject; // this does not call __toString() 

PHP> = 5.2.0

$yourObject = new YourClass(); 
echo $yourObject; // this works 
printf("%s", $yourObject); // this works 
echo 'Hello ' . $yourObject; // this works 
echo 'Hello ' . $yourObject->__toString(); // this works 
echo (string)$yourObject; // this works 
0

Vous devez appeler explicitement la fonction magique php __toString() pour les versions < 5.2. Donc, votre code deviendra quelque chose comme ceci:

public function myname() 
    { 
     $name = $this->name; 
     return $name.__toString(); //for php versions < 5.2,will also work > 5.2 
    } 

Pour les versions> 5.2 __toString est automatiquement appelé

+2

Je suppose que vous vouliez dire '$ name -> __ toString();'. –

0

Vous devez installer sudo apt install php7.0-mbstring besoin de changer la version de PHP selon votre.

Après cela, ne pas oublier d'exécuter service apache2 restart

Espérons que cela aidera.

Questions connexes