2010-05-25 10 views
5

In codeigniter Sto cercando di usare il plugin this che richiede di implementare un metodo toString nei miei modelli. Il mio metodo toString fa semplicementephp 5.1.6 magic __toString method

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

Sulla mia macchina locale con PHP 5.3 tutto funziona bene, ma sul server di produzione con PHP 5.1.6 mostra "Object ID # 48", dove il valore della proprietà nome di quel dovrebbe apparire l'oggetto ..... Ho trovato qualcosa sul problem here ma ancora non capisco ... Come posso risolvere questo?

+0

Hai provato a restituire (stringa) $ questo-> nome? – Galen

risposta

2

PHP aggiornamento

Sono considerando lo stesso problema, sospetto che la tua migliore opzione sia l'aggiornamento di php sul server di produzione a >= 5.2.0

In futuro (attualmente sto imparando questo nel modo più duro), prova a sviluppare sulla stessa versione distribuire a.

3

Per citare dal manuale:

Vale la pena notare che prima di PHP 5.2.0 il metodo __toString è stato chiamato solo quando si è direttamente unito con echo() o print(). Dal PHP 5.2.0, viene chiamato in qualsiasi contesto di stringa (ad esempio in printf() con% s modificatore ) ma non in altri contesti (ad esempio con% d modificatore). Dal PHP 5.2.0, la conversione degli oggetti senza il metodo __toString nella stringa causerebbe E_RECOVERABLE_ERROR.

Credo che bisogna chiamare manualmente il metodo __toString se lo si usa in PHP < 5.2 e non nel contesto di un eco o di stampa.

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

È necessario chiamare esplicitamente la funzione di php __toString() per le versioni < 5.2. Così il codice diventerà qualcosa di simile:

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

Per le versioni> 5.2 __toString viene chiamato automaticamente

+2

Ho il sospetto che intendessi '$ nome -> __ toString();'. –

0

È necessario installare sudo apt install php7.0-mbstring necessità di cambiare la versione di PHP secondo il vostro.

E dopo questo non dimenticate di eseguire service apache2 restart

Spero che questo vi aiuterà.