Czuję się wezwany do tablicy przez cojacka i streszczę mój post poprzedni jeśli zagmatwałem. __toString to po prostu funkcja specjalna reagująca na wywołanie obiektu w kontekście stringa (czyli -> echo $a)
Rzucę szerszym przykładem, by pokazać dokładniej działanie skoro napisałem masło maślane
<?php
class A {
//kilka zmiennych klasy o różnej widoczności
public $x;
private $y;
//konstruktor domyślny
public function __construct() {
$this->x = 23;
$this->y = 'cos';
}
//wyświetla zmienną prywatną
public function pokaz_y() {
return $y;
}
//zmienia zmienną prywatną
public function zmien_y( $nowa ) {
$this->y = $nowa;
}
//funkcja "magiczna"
public function __toString() {
return 'jestem x ='.$this->x.' i y = '.$this->y;
}
}
//tworzy obiekt klasy A
$a = new A;
// wyświetlenie obiektu klasy A jako string <- niejawne wywołanie __toString
//wyświetlenie pokazać powinno, że nastąpiło utworzenie przez konstruktor domyślny i inicjalizacja
//zmieniamy zmienną prywatną w obiekcie
$a->zmien_y( 'string_jakis' );
//wyświetlamy obiekt znów niejawnie przez __toString powinno pokazać, że faktycznie y się zmienił
//zmieniamy zmienną publiczną obiektu
$a->x = 67;
//ponowne wyświetlenie powinno pokazać, że zmieniła się zmienna publiczna
?>
Zastosowania tego nie widać może od razu, ale przydaje się przy pisaniu własnego CMS w MVC, gdzie widok śmiało może być obiektem i przez to wysłany być do przeglądarki jako część większego widoku. Jeśli więc masz cały layout jako choćby lewe - centrum - prawe to możesz zrobić tak:
$ankieta->wpisz_dane_do_widoku_ankiety($dane_ank);
$nawigacja->wpisz_dane_menu_nawigacyjnego($dane_naw);
$lewe = $ankieta.$nawigacja;
Co to da? Wstawi ankietę i nawigację jako jeden string wysłany do widoku lewe

To banalny sposób na dołączanie różnych paneli dynamicznie w CMS, bo możesz każdy element dynamicznie "wrzucać" do różnych miejsc na stronie. Obłóż to JS (drag & drop) lub zaplanuj panel edycji elementów i każdy user może sobie sam layout strony ustawić oraz włączać i wyłączać potrzebne panele.