Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 2 podobne klasy, jak zrobić dla nich klasę rodzica ?
enigma
post
Post #1





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


jeszcze mało miałem do czynienia z obiektami i mam problem jak zrobić dziedziczenie
załóżmy że mam 2 klasy: uczeń i nauczyciel
w każdej z tych klas będzie zmienna (tablica), konstruktor no i funkcje no i funkcje (pobierz_dane, dodaj, usuń, zmień)

jak chciałbym zrobić klasę podstawową np. osoba a uczeń i nauczyciel jako dziedziczące to
w w osoba byłyby funkcje a w uczeń i nauczyciel dziedziczyłyby te funkcje no i miały swoje konstruktory, oraz swoje tablice na dane)

no i problem jest z klasą osoba, nie bardzo wiem jak ją utworzyć

część klas bez dziedziczenia
  1. <?php
  2. class Uczeń
  3. {
  4.  $zUczenTab = array
  5.  (
  6.  'idUczen' => null,
  7. 'Klasa_idKlasa' => null,
  8. 'imie' => null,
  9. 'nazwisko' => null,
  10. 'adres' => null,
  11. 'telefon' => null,
  12. 'imie_ojca' => null,
  13. 'imie_matki' => null
  14. );
  15.  
  16. $zUczenIndeksy = 'idUczen, Klasa_idKlasa, imie, nazwisko, adres, telefon, imie_ojca, imie_matki';
  17.  
  18. function __construct($zTablica)
  19. {
  20. if(!is_array($zTablica)) return;
  21.  
  22. foreach($zTablica as $zKlucz => $zWartosc)
  23. $this -> zUczenTab[$zKlucz] = $zWartosc;
  24. }
  25.  
  26. function fPobierzDane($zWartosci, $zKryteria = null)
  27. {
  28.  //
  29. $zSQL = 'SELECT '.$zWartosci.' FROM uczen'.$zWarunek;
  30. //
  31. while($zIle--)
  32. {
  33.  //
  34. $zListaUczniow[] = new Uczeń($zDane);
  35. }
  36.  
  37. return $zListaUczniow;
  38. }
  39. }
  40. ?>


  1. <?php
  2. class Nauczyciel
  3. {
  4.  $zNauczycielTab = array
  5.  (
  6.  'idNauczyciel' => null,
  7. 'imie' => null,
  8. 'nazwisko' => null,
  9. 'telefon' => null,
  10. );
  11.  
  12. $zNauczycielIndeksy = 'idNauczyciel, imie, nazwisko, telefon';
  13.  
  14. function __construct($zTablica)
  15. {
  16. if(!is_array($zTablica)) return;
  17.  
  18. foreach($zTablica as $zKlucz => $zWartosc)
  19. $this -> zNauczycielTab[$zKlucz] = $zWartosc;
  20. }
  21.  
  22. function fPobierzDane($zWartosci, $zKryteria = null)
  23. {
  24.  //
  25. $zSQL = 'SELECT '.$zWartosci.' FROM nauczyciel'.$zWarunek;
  26. //
  27. while($zIle--)
  28. {
  29.  //
  30. $zListaNauczycieli[] = new Nauczyciel($zDane);
  31. }
  32.  
  33. return $zListaNauczycieli;
  34. }
  35. }
  36. ?>


głównie problem jest w tym że:
1. mam wywołania new Nauczyciel i new Uczeń, jak to zrobić w klasie ogólnej
2. w obu klasach są zmienne $zUczenTab = array ... i $zNauczycielTab = array ... (mają różne komórki) a czy da się zrobić tak sprawnie żeby odziedziczone funkcje działały na tych zmiennych (bez przekazywania parametrów do funkcji)

ogólnie rzecz biorąc zastanawiam się jak zrobić klasę rodzica - Osoba na podstawie wyżej podanych fragmentów klas, żeby mogły po niej dziedziczyć

pewnie to wszystko zamotałem, ale może ktoś z Was pomoże mi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
menic
post
Post #2





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


możliwości jest kilka. Mozesz np. zrobić abstrakcyjna klase osoba i poniej dziedziczyć. Zamiast nazw zNauczycielTab poprostu samo zTab. I pozniej tworzysz poprostu new Uczen i masz metody z klasy Osoba.

Ten post edytował menic 8.03.2007, 20:02:02
Go to the top of the page
+Quote Post
enigma
post
Post #3





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(menic @ 8.03.2007, 20:00:25 ) *
Zamiast nazw zNauczycielTab poprostu samo zTab.
no fakt, przyćmiło mnie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) przecież można później do tabeli wprowadzić wszystkie potrzebne komórki

ale i tak zamotałem temat
jeszcze raz o głównym problemie
załóżmy mam już ta klasę osoba
i w niej funkcję pobierz_dane, która będzie dziedziczona w klasach uczeń i nauczyciel no ale jeżeli ta funkcja ma tworzyć tabelę obiektów to jak mam ją napisać żeby w klasie uczeń robiła new uczeń ... a w klasie nauczyciel new nauczyciel ?
Go to the top of the page
+Quote Post
splatch
post
Post #4





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Można pokusić się o rozwinięcie idei...

  1. <?php
  2. // Definicje wspólne dla wielu obiektów
  3. interface ILiveSchoolElement {} // na codzień w szkole
  4. interface IPeople {} // jakaś osoba
  5. interface ITeacher extends People {} // nauczyciel
  6. interface ILearner extends People {} // uczeń
  7.  
  8. // Implementacja metod wspólnych
  9. abstract class AbstractPeople implements People {}
  10. abstract class AbstractPeopleLiveSchoolElement extends AbstractPeople implements ILiveSchoolElement {}
  11.  
  12. // Specjalizacja, implementacja metod specyficznych
  13. class Teacher extends AbstractPeopleLiveSchoolElement implements ITeacher {}
  14. class Learner extends AbstractPeopleLiveSchoolElement implements ILearner {}
  15.  
  16. // i może na końcu ..
  17. class Jacek extends Learner {}
  18. ?>


Wyzwól swój umysł z okowów strukturalnych błędów.
Go to the top of the page
+Quote Post
menic
post
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Możesz np.
  1. <?php
  2. function fPobierzDane($zWartosci, $zKryteria = null)
  3. {
  4.  //
  5. $zSQL = 'SELECT '.$zWartosci.' FROM nauczyciel'.$zWarunek;
  6. //
  7. while($zIle--)
  8. {
  9.  //
  10. $zLista[] = new __CLASS__($zDane); //__CLASS__ pobierze nazwe klasy
  11. }
  12.  
  13. return $zLista;
  14. }
  15. ?>
Go to the top of the page
+Quote Post
enigma
post
Post #6





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(splatch @ 8.03.2007, 20:46:29 ) *
Wyzwól swój umysł z okowów strukturalnych błędów.
małymi krokami, ale się staram (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Cytat(menic @ 8.03.2007, 20:57:05 ) *
new __CLASS__($zDane); //__CLASS__ pobierze nazwe klasy
no tak, tyle że zwraca mi nazwę klasy rodzica - osoba a mi jest potrzebna nazwa klasy która dziedziczy tę funkcję czyli uczeń lub nauczyciel. Znalazłem get_class() ale, ona używa $this a ja nie mogę używać $this bo funkcja pobierz_dane jest statyczna
Go to the top of the page
+Quote Post
UDAT
post
Post #7





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Jeśli dobrze zrozumiałem, to spróbuj czegoś takiego:
  1. <?php
  2. class Osoba {
  3. public abstract static newInstance ( $zDane );
  4. public abstract getTableName ( );
  5.  
  6. public static function fPobierzDane($zWartosci, $zKryteria = null)
  7. {
  8.  //
  9. $zSQL = 'SELECT '.$zWartosci.' FROM '. self::getTableName() . ' ' .$zWarunek;
  10. //
  11. while($zIle--)
  12. {
  13.  //
  14. $zLista[] = self::newInstance()($zDane);
  15. }
  16.  
  17. return $zLista;
  18. }
  19. }
  20. ?>
Go to the top of the page
+Quote Post
domis86
post
Post #8





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(enigma @ 8.03.2007, 22:37:15 ) *
no tak, tyle że zwraca mi nazwę klasy rodzica - osoba a mi jest potrzebna nazwa klasy która dziedziczy tę funkcję czyli uczeń lub nauczyciel. Znalazłem get_class() ale, ona używa $this a ja nie mogę używać $this bo funkcja pobierz_dane jest statyczna


Hmm, statyczna? To to jest jakiś singleton, ktory zwraca jakąś tablice obiektow swojego typu? Nie wyglada mi to najlepiej. Odradzam stsosowania tu statycznych metod.

Moze wytlumacz jasniej co ta funkcja PobierzDane ma robic?
Go to the top of the page
+Quote Post

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: 23.12.2025 - 12:21