Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z klasami :/
Forum PHP.pl > Forum > PHP
shpyo
Witam,
ostatnio męczę sie z następującym problemem...
Napisałem sobie coś w stylu sterownika do bazy mySQL...
Teraz chcę to połączyć z innymi klasami, które będą odpowiadać np. za Newsletter, Użytkowników (dodawanie / edycja / usuwanie itp).

Problem jest w tym jak te klasy ze sobą połączyć, tzn wiem jak, ale jak zrobić dziedziczenie klas.

Główna to oczywiście sterownik do bazy a potem w/w moduły korzystające z niej. Wtedy "drzewko" klas wyglądałoby mniej więcej tak:

Sterownik bazy
|- newsletter
|- urzytkownicy
|- ...
|- co jeszcze

Co wtedy dzieje się z konstruktorami do klas? One nie są konieczne, tak?
Może ma ktoś jakieś pomysły lub wie jak mnie naprostować.

Problem niby błachy, ale nie mogę go rozwiązać, - mam za dużo pytań na które nie mogę znaleść odpowiedz :/

za pomoc dziękuję!
bela
Czegoś tu nie rozumiem smile.gif Czemu dziedziczysz ze sterownika, użytkowników, newsletter etc. User i newsletter korzysta ze sterownika. To tak jakby pralka dziedziczyła z samochodu a łączyło by ją to że się tapicerke pierze biggrin.gif

Proponowałbym abyś wziął jakiś framework ( Phiend ? biggrin.gif ) i napisał co chcesz, jak nabierzesz wprawy sam napiszesz frameworka winksmiley.jpg
shpyo
hmm, czyli źle narysowałem drzewko?
Chodzi mi o to co zrobić z konstruktorami w każdej z klas... Z klasy sterującej zapytaniami do mySQL będą korzystać moduły.
hawk
@shpyo: Ale naprawdę nie wiemy, o co ci dokładnie chodzi... Konstruktory nie są generalnie potrzebne w OO. A dziedziczenie nijak tutaj nie pasuje.
jerrys
Jeżeli dobrze zrozumiałem to chodzi CI żeby w każdej z klas były widoczne metody z klasy z baza.
Jeżeli o to chodzi to może to Ci pomoże:
W każdej z klas należy zrobić dzidziczenie z klasy z baza np:

  1. <?php
  2.  
  3. class Urzytkownicy extends Sterownik_Baza
  4. {
  5. var $baza; //jakies zmienne
  6. var $baza_polaczenie;
  7.  
  8.         function Urzytkownicy ($nazwa_bazy)
  9.         {
  10.           $this->baza=$nazwa_bazy;
  11.         }
  12.  
  13.         function polacz ()
  14.         {
  15.           $this->baza_polaczenie=new Sterownik_Baza($this->baza);
  16.         }
  17.  
  18. //inne metody
  19. };
  20.  
  21. ?>


Może to CI coś da bo nie wiadomo o co Ci dokładnie chodziło. snitch.gif
dr_bonzo
@shpyo: jak juz ci pisali: sterownik jest od sterowania -- nie rozszerzaj go do Newsow itd.
Po prostu uzywaj go. Jak Adodb (rozumiem ze twoj sterownik dziala na podobnej zasadzie).

  1. <?php
  2. class News
  3. {
  4. ...
  5. function pobierzNewsy()
  6. {
  7. // lub singleton jesli bedzie tu pasowal
  8. $this->Sterownik = new DbSterownik();
  9. // polaczeni z baza itd
  10. $x = $this->Sterownik->zapytanie( &#092;"SELECT * form news ...\" );
  11. ...
  12. }
  13. }
  14.  
  15. ?>


@jerrys: Uzytkownik pisze sie przez Z -- przecierz wymienia sie na User tongue.gif
bendi
Konstruktory zachowuja sie tak samo jak inne metody. Nadpisanie konstruktora powoduje wywolanie tego nadpisanego, i trzeba zadbac o to zeby konstruktor rodzica zostal wywowlany, natomiast jezeli klasa dzedziczaca nie posiada konstruktora to zostanie wywolany konstruktor rodzica, ot cala filozofia. A teraz zdziebko kodu:
  1. <?php
  2. //klasa bazowa
  3. class Base {
  4.   function __construct(){
  5.     echo 'Base';
  6.   }
  7. }
  8.  
  9. class Bla_Base extends Base{
  10. //brak konstruktora zostaje wywolany ten z rodzica
  11. }
  12.  
  13. class Ble_Base extends Base{
  14. //nadpisany konstruktor w klasie dziedziczacej zostanie wywolany tylko ten
  15.    function __construct(){
  16.       echo 'Bla_Base';
  17.    }
  18. }
  19.  
  20. class Bli_Base extends Base{
  21. //rozszerzenie konstruktora rodzica
  22. //nadpisujemy konstruktor a pozniej najpierw wywoluemy w nim konstruktor rodzica
  23.    function __construct(){
  24.       parent::__construct();
  25.       echo 'Bli_Base';
  26.    }
  27. }
  28. ?>


Moze to Ci pomoze.
shpyo
dzięki wszystkim za pomoc, rozjaśniliście mi w głowie ^^
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.