Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> __toString(); Kilka pytań.
zeten
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 1.08.2009
Skąd: Katowice, Rybnik

Ostrzeżenie: (0%)
-----


Witam,

Średnio potrafię znaleźć interesujące mnie informacje na temat metody __toString()

Metodę __toString() wykorzystujemy w nowszym czy starszym PHP?

Zdarzyło mi się tak, że przekazywanie obiektu do sesji bez problemu działa na jednym hostingu.. a na drugim już nie. Na jednym i drugim znajduję się PHP 5.2.10.. Od czego to zależy?

Jeżeli zależy to od jakieś konfiguracji czy jakiegoś modułu.. to która instalacja PHP jest poprawna? Ta, która nakazuje wykorzystanie metody __toString() czy tak, która w sposób automatyczny przekształca obiekt w string? Chodzi mi tutaj głównie o nawyki poprawnego programowania w PHP.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/winksmiley.jpg)
  1. <?php
  2. class A {
  3. //kilka zmiennych klasy o różnej widoczności
  4. public $x;
  5. private $y;
  6.  
  7. //konstruktor domyślny
  8. public function __construct() {
  9. $this->x = 23;
  10. $this->y = 'cos';
  11. }
  12.  
  13. //wyświetla zmienną prywatną
  14. public function pokaz_y() {
  15. return $y;
  16. }
  17.  
  18. //zmienia zmienną prywatną
  19. public function zmien_y( $nowa ) {
  20. $this->y = $nowa;
  21. }
  22.  
  23. //funkcja "magiczna"
  24. public function __toString() {
  25. return 'jestem x ='.$this->x.' i y = '.$this->y;
  26. }
  27. }
  28.  
  29. //tworzy obiekt klasy A
  30. $a = new A;
  31.  
  32. // wyświetlenie obiektu klasy A jako string <- niejawne wywołanie __toString
  33. //wyświetlenie pokazać powinno, że nastąpiło utworzenie przez konstruktor domyślny i inicjalizacja
  34. echo $a;
  35.  
  36. //zmieniamy zmienną prywatną w obiekcie
  37. $a->zmien_y( 'string_jakis' );
  38.  
  39. //wyświetlamy obiekt znów niejawnie przez __toString powinno pokazać, że faktycznie y się zmienił
  40. echo $a;
  41.  
  42. //zmieniamy zmienną publiczną obiektu
  43. $a->x = 67;
  44.  
  45. //ponowne wyświetlenie powinno pokazać, że zmieniła się zmienna publiczna
  46. echo $a;
  47. ?>
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:
  1. $ankieta->wpisz_dane_do_widoku_ankiety($dane_ank);
  2. $nawigacja->wpisz_dane_menu_nawigacyjnego($dane_naw);
  3. $lewe = $ankieta.$nawigacja;

Co to da? Wstawi ankietę i nawigację jako jeden string wysłany do widoku lewe (IMG:style_emoticons/default/smile.gif) 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.

Ten post edytował thek 13.10.2009, 14:11:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 20:00