Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z dzidziczeniem
Corwin
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.12.2006

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


mam problem z wywołaniem metod w klasie dziecko i po przejrzeniu 2 książek i kilku manuali i kursów nie wiem czemu tak się dzieje.

klasa rodzic
  1. <?php
  2. class uzytkownik
  3. {
  4.  //jakies zmienne
  5. public function helo(){
  6. echo "helo world";
  7. }
  8. }
  9. ?>


klasa dziecko
  1. <?php
  2. class administrator extends uzytkownik {
  3.  //jakies zmienne
  4. public function lista_admin(){
  5. echo "helo";
  6. }
  7. }
  8. ?>


obiekty tworzone są w jednym pliku
plik1.php
  1. <?php
  2. $obiekt = new uzytkownik;
  3. $admin = new administrator;
  4.  
  5. $admin  = clone $obiekt; // przypisuje zmienne do dziecka
  6.  
  7. $_SESSION['sesja_save'] = serialize($obiekt);
  8. $_SESSION['sesja_save2'] = serialize($admin);
  9. ?>


a następnie w innym odtwarzane
plik2.php
  1. <?php
  2. $obiekt = unserialize($_SESSION['sesja_save']);
  3. $admin = unserialize($_SESSION['sesja_save2']);
  4.  
  5. $admin->helo(); // działa
  6. $admin->lista_admin(); // daje komunikat "Fatal error: Call to undefined method uzytkownik::lista_admin()"
  7. ?>
Go to the top of the page
+Quote Post
kwiateusz
post
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




bo mi sie zdaje ale błąd robisz w $admin = clone $obiekt; bo zamieniasz administratora na użytkownika w czego wyniku masz tak jakbys dał do obu zmiennych new użytkownik...
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
$admin = clone $obiekt; // przypisuje zmienne do dziecka
nie za bardzo czaisz co robi clone. clone klonuje ci obiekt a ty to co sklonujesz przypisujesz do $admin, nadpisujac tym samym starą zawartosc $admin. Teraz $admin nie jest juz obiektem admnistrator, ale jest obiektem uzytkownik, co tlumaczy twoj komunikat bledu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





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




Ja mam tylko pytanie: Po co tworzysz dwa obiekty? Osobno Administrator i osobno Użytkownik - nie widzę sensu, ale może nie rozumiem kontekstu... Możesz wyjaśnić?

Pozdrawiam.


--------------------
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
Corwin
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.12.2006

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


sprawa wygląda tak, że w plik1.php zanim tworzone są obiekty dzieci są wykonywane operacje na rodzicu i jest tam trochę zmiennych a potem jak worze klasy dziecko to te zmienne znikają. Dlatego jest klon. Operacje klas dziecko wykorzystywane są dopiero w plik2.php

Ten post edytował Corwin 28.12.2006, 18:40:33
Go to the top of the page
+Quote Post
em1X
post
Post #6





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


no dobra, wkleiles kupe kodu, nikomu sie nie bedzie chcialo tego wertowac..
jakie jest więc twoje pytanie?

nie wywolasz metody lista_admin skoro wywolujesz ją na rzecz obiektu klasy uzytkownik.

Ten post edytował em1X 28.12.2006, 18:37:19


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
Corwin
post
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.12.2006

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


Cytat(Cysiaczek @ 28.12.2006, 18:24:13 ) *
Ja mam tylko pytanie: Po co tworzysz dwa obiekty? Osobno Administrator i osobno Użytkownik - nie widzę sensu, ale może nie rozumiem kontekstu... Możesz wyjaśnić?

Pozdrawiam.


Ten system będzie mieć użytkowników kilku rodzai mają oni część cech i metod wspólnych, ale część nie. chciałem rozdzielić różnice i operacje bezpośrednio na danych użytkownikach po klasach dziecko a cechy wspólne trzymać w rodzicu.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #8





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




W takim wypadku wg. mnie, z dziedziczeniem trafiłeś kulą w płot. Po to masz dziedziczenie, aby tworzyć specjalizacje poprzez tworzenie od razu obiektu dziecka, a nie najpierw rodzica, a potem dziecka. Jeśli jednak bardzo chcesz zachować taka strukturę, to wykonaj operacje dla rodzica w kontekście klasy, a nie obiektu. Skorzystaj z właściwości jakie dają metody i składowe statyczne. Kiedy już skonfigurujesz klasę, wyprowadź z niej obiekty dzieci. Wtedy każdy będzie mógł odczytać np. zmienne statyczne w klasie macierzystej.

Pozdrawiam.


--------------------
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
Vertical
post
Post #9





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


Cytat
sprawa wygląda tak, że w plik1.php zanim tworzone są obiekty dzieci są wykonywane operacje na rodzicu i jest tam trochę zmiennych a potem jak worze klasy dziecko to te zmienne znikają. Dlatego jest klon. Operacje klas dziecko wykorzystywane są dopiero w plik2.php

Jeśli dobrze zrozumiałem, to klonowanie nie rozwiąże problemu. Możesz zrobić albo tak:
  1. <?php
  2. $admin->zmienna = $obiekt->zmienna2
  3. ?>

Albo, jeśli te zmienne są chronione, to zrobić jakąś metodę w klasie administrator, która by robiła to, co powyżej.
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 Aktualny czas: 20.08.2025 - 23:21