Quote Originariamente inviata da badaze Visualizza il messaggio
Di per se il metodo si chiama toString quindi rinviare un dato puramente numerico è un'eresia. No ?

con puramente numerico voglio dire che non sia una stringa composta da soli numeri.
Ovviamente far restituire un valore numerico q quel metodo non è corretto, ma pensavo facesse lui un casting del dato senza controllarlo. C'è da controllare prima che su quella proprietà non finisca un valore numerico e questo mi sembra un limite.
Comunque l'errore che ricevo nel primo esempio è questo:
Catchable fatal error: Method tmp::__toString() must return a string value in /var/wwwtest1.php on line 14

Invece se modifico la classe in questo modo:
Codice PHP:

class  tmp{
  private 
$dato;
  function 
__construct($value='') {
    
$this->dato=$value;
  }

  function 
__toString() {
    if(
is_numeric($this->dato))
      return (string)
$this->dato;
    return (
$this->dato) ? $this->dato '';
  }
}

$tmp=new tmp(1);
echo 
$tmp>0
L'errore ricevuto è questo:
Notice: Object of class tmp could not be converted to int in /var/www/test1.php on line 16

Quote Originariamente inviata da clasku Visualizza il messaggio
ho fatto un paio di prove e scrivendo

Codice PHP:
function __toString() {
    return 
"$this->dato";
  } 
mi sembra funzioni correttamente
Quello che scrivi è fare il casting del dato, se poi faccio il controllo come nel secondo esepio non va bene e ricevo l'errore indicato.