![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
http://www.php.net/manual/pl/language.oop5....magic.tostring
Cytat 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? SOA1 Moze bys pokazal kod i ew. komunikaty bledu, ciastka sesyjne itp. |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
toString jest "metodą magiczną". Która pozwala, jak wiesz, przesłać obiekt jako typu String. Zazwyczaj jej ciało trzeba zdefiniować gdyż dla różnych klas może ona przyjmować różne formy. Czasem może to być zapis obiektu w formie identycznej z var_dump, ale niekonieczne.
Metoda ta jest wykorzystywana w obiektowym php gdy zachodzi konieczność konwersji obiektu. Jako że nie jest jednolita jak inne funkcje to i ciężko znaleźć jej jasną wykładnię, gdyż jest po prostu definiowalna dowolnie, podobnie jak konstruktor czy destruktor klasy. To w dużej mierze od programisty zależy jak wygląda. Frameworki często mają domyślną definicję tej klasy, przez co jest w nich ona wywoływana niejawnie i gdy wyskoczy błąd z nią, to początkujący nie wiedzą skąd się ta funkcja wzięła. Ja położyłbym ją pomiędzy funkcjami konwersji, jak choćby toObject, bo tam właśnie ona przynależy. Ze swojej strony uważam, że dobrym zwyczajem byłoby, by programista o nią dbał i definiował w klasie. No chyba, że framework już za niego o to dba i ma swoją własną, domyślną wersję, bo po co pisać coś dwa razy? Tylko w przypadku różnic powinno się przeciążyć tę metodę. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
@edit
post powyżej jest jak monolog prezydenta, o wszystkim i o niczym, masło maślane, coś z czegoś coś do czegoś, ale po co i jak to ni huhu. Bezsensu człowieku opisujesz problem. dajmy na to:
szybkie objaśnienie czym jest __toString(); Ten post edytował cojack 13.10.2009, 10:00:21 |
|
|
![]()
Post
#5
|
|
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) 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:
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 09:35 |