Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klonowanie
Vomit
post 14.06.2006, 13:22:04
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Witam,

O klonowaniu obiektow wiem tyle ile wyczytalem w manualu, tzn. w jaki sposob sie klonuje itp. Nie mam problemu ze skladnia ani z zastosowaniem.

Nie chce tego stosowac "na siłe", wiec nie stosuje w ogole. Obecnie jednak nachodzi mnie mysl, w jakich przypadkach takie klonowanie przydaje sie? Moglibyscie przytoczyc jakies typowe przyklady lub sytuacje w ktorych bez klonowania nie obejdzie sie?

Z gory dzieki.
Go to the top of the page
+Quote Post
athabus
post 14.06.2006, 13:31:51
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


W sumie nie pamietam czy kiedys tego uzywalem ale z tego co pamietam to funkcja __clone moze byc nadpisana - wiec mozesz samodzielnie zdefiniowac co ma zrobic. Sytuacja -> Masz jakis produkt w bazie swojego sklepu - jesli zrobisz jego kopie to ten produkt bedzie mial takie samo id jak kopia - przerabiajac funkcje __clone mozesz zastrzedz np. ze id ma byc wygenerowane od nowa aby nie bylo konfliktu.

Druga sprawa to w php5

gdy robisz obiekt1=obiekt2 to tak na prawde obiekt1 jest referencja do obiektu2 a nie jego kopia... __clone chyba wykonuje prawdziwa kopie obiektu (pisze z pamieci wiec to moze nie byc prawda).

Ogolnie to wydaje mi sie ze funkcja __clone to tak jak inne funkcje tego typu (np. __toString) tylko ulatwienia dla programisty. Daja Ci pewna wygode stosowania, ale wszystko co realizuja mozesz zrealizowac w inny sposob.
Go to the top of the page
+Quote Post
Cysiaczek
post 14.06.2006, 17:07:07
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Zastosowań klonowania obiektu może być wiele. Możesz np. chcieć 'przepuścić' obiekty przez różne funkcje, które coś z nimi zrobią i porównać wyniki.
Można też sklonować obiekt na wypadek, gdybyś nie był pewny, czy przypadkiem nie będziesz musiał w którymś momencie aplikacji odwołać się do niego, ewentualnie jeśli "zepsujesz" oryginał, to zawsze możesz po prostu użyć kopii, zamiat tworzyć obiekt od nowa (to np. jest fajne, przy tworzeniu obiektów na podstawie bazy danych, bo jak zepsujesz dane, to nie musisz po raz drugi odpytywać bazy, tylko dobierasz się do wprost do obiektu).
Na marginesie. W php5 domyślne przekazywanie obiektu jest dokonywane przez referencję, co jest szczególnie przydatne w projektach obiektowych, bo nie musimy się zastanawiać, na jakim obiekcie pracujemy. W php4 trzeba było używać (&) i prowadziło to niekiedy do trudno zauważalnych błędów.
Można powiedzieć, że zmieniono nieco filozofię: Musisz jawnie powiedzieć, kiedy chcesz kopię obiektu. W php4 filozofia była dokładnie odwrotna.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:02