2010-05-25 13 views
5

In codeigniter Estoy tratando de usar el complemento this que requiere que implemente un método toString en mis modelos. Mi método toString simplemente hacephp 5.1.6 magic __toString method

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

En mi máquina local con php 5.3 todo funciona muy bien, pero en el servidor de producción con PHP 5.1.6 se muestra "Object ID # 48" donde el valor de la propiedad del nombre de ese debería aparecer el objeto ..... Encontré algo sobre el problem here pero todavía no entiendo ... ¿Cómo puedo solucionar esto?

+0

¿Has probado return (string) $ this-> name? – Galen

Respuesta

2

PHP actualización

estoy lidiando con el mismo problema, sospecho que su mejor opción será actualizar php en el servidor de producción a >= 5.2.0

En el futuro (estoy aprendiendo esto de la manera difícil), trate de desarrollar en la misma versión que usted implementar a.

3

citar el manual:

Cabe señalar que antes de PHP 5.2.0 el método __toString solamente se llama cuando se combinó directamente con echo() o print(). Desde PHP 5.2.0, se llama en cualquier contexto de cadena (por ejemplo, en printf() con el modificador% s ) pero no en otros contextos de tipos (por ejemplo, con el modificador% d). Desde PHP 5.2.0, la conversión de objetos sin el método __toString a la cadena provocaría E_RECOVERABLE_ERROR.

Creo que tiene llamar al método __toString manualmente si se está usando en PHP < 5.2 y no en el contexto de un eco o de impresión.

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

Tiene que llamar explícitamente a la función de magia php __toString() para las versiones < 5.2. Así que el código será algo como esto:

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

Para las versiones> 5.2 el __toString es llamado automáticamente

+2

Sospecho que querías decir '$ name -> __ toString();'. –

0

Es necesario instalar sudo apt install php7.0-mbstring necesidad de cambiar la versión de PHP como por su.

Y después de esto no se olvide de ejecutar service apache2 restart

Esperamos que esto ayude.