Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klonowanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Vomit
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.
athabus
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.
Cysiaczek
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 jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.