Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziedziczenie
Forum PHP.pl > Forum > PHP > Object-oriented programming
rahul
Witam was.
Mam taki problem w rozumieniu oop.
Chcialbym aby moja klasa UserManagera ktora zarzadza obiektem user dziedziczyla inna klase.

mam cos takiego:
Klasa user_M dziedziczy po klasie CRUD
  1. $Database = new Database($hostname,$dbname,$username,$password); // klasa database zwraca polaczenie PDO;
  2. $crud = new CRUD($Database ); // laduje do konstruktora obiekt PDO
  3.  
  4. $user_M = new userManager(); // tu wywala blad constructora klasy po ktorej dziedzicze ze parametr ktory przekazuje jest pusty.

Dodatkowo dodam ze dopiero co ucze sie OOP w php i wymyslilem sobie aby moje managery dziedziczyly pewne dodatkowe funkcje z klasy nadrzednej. W tej nadrzednej klasie musze natomiast w do konstruktora przekazac obiekt polaczenia z bd ktory znika przy wywolaniu jakiejkolwiek klasy ktora dziedziczy se.

albo w ogole jeszcze inne opcje.
Rozwazam teraz 2 warianty.
Czy lepiej aby moja baza danych dziedziczyla klase crud i wtedy przekazuje instancje bazy danych do userManagera czy aby moja klasa UserManagera dziedziczyla po klasie CRUD. bardziej podoba mi sie 2 opcja ale nie wiem na ile jest dobra. Co do poprzedniego posta to przeciez instancje moge obiektu bazy danych moge wykonac w konstruktorze a potem przy dziedziczeniu go nie nadpisywac , tak ?
Kurcze ktoredy droga smile.gif
greycoffey
userManager nie jest, nie rozszerza, CRUDa? Jeśli tak, dziedziczenie nie ma sensu. Zastosuj kompozycję, a nie sztucznie tworzone wytyczne wink.gif
rahul
Cytat
userManager nie jest, nie rozszerza, CRUDa?


sorry ale nie rozumiem :/ .
Zastanawiam sie czy plik bazy danych powinien zawierac badz rozszerzac cruda, czy plik managerow.
Dodatkowo, wczesniej zostalem poinformowany ze nalezy robic instancje bazy danych, potem ja przekazac do klasy managera. A ja sobie mysle ze fajnie byloby aby juz manager rozszerzal jakas klasa ktora ta instancje ma i dzieki temu nie musze wywolywac bazy danych ciagle jak chce skozystac z managera tylko dzieje sie to wewnatrz niego. Dobrze kombinuje ? Potrzebuje tutaj pomocy chlopcy. Nie duzo jeszcze wiem o tych patentach.
CuteOne
  1. class User {
  2.  
  3. protected $user_id;
  4.  
  5. protected $db;
  6.  
  7. public function __construct($userid) {
  8.  
  9. $this->db = MultiBD:: getDefaultAdapter(); //instancja bazy danych
  10.  
  11. if(!empty($userid)) {
  12.  
  13. $this->user_id = $userid;
  14. }
  15. else {
  16.  
  17. $this->createAnonymousUser();
  18. }
  19.  
  20. return $this;
  21. }
  22. }
  23.  
  24.  
  25. $m = new UserManager('klucz', new User(123));


CRUD'em w tym wypadku jest User a UserManager tylko nim "steruje". Oczywiście User, może rozszerzać jakąś inną klasę w której będziesz trzymał podstawowe metody typu usuń, dodaj, zmień
rahul
kurcze,bez kitu troche sie gubie w tej kwestii. Mam pliki user, userManager, crud, i db.
Wczesniej robilem same kontenery a zarzadzal nimi user_manager.
Z tego co wyzej napisales to model moze rozszerzac cruda. ok, ok, ale to wtedy po co mi caly ten manager. Wszyskie funkcje moge walnac do modelu i bedzie gruby model. Dobrze ?
Do tego widze ze do baze przekazujesz singletonem a tak chyba jest fee..
CuteOne
  1.  
  2. $m = new UserManager();
  3. $m -> addItem('Admin', new User(1));
  4.  
  5. foreach($m->permissions as $k => $objPermission) {
  6.  
  7. echo $m . ' posiada '.$objPermission.'<br>'; //__toString dla picu ;)
  8.  
  9. if($objPermission->notAdmin) { // czy jest adminem?
  10.  
  11. $m->permissions->removeItem($key); // nie jest więc usuwamy z kolekcji
  12. echo 'Sorry nie jesteś adminem';
  13. }
  14. }


Takie mini-demo tego co można zrobić z Managerem(dokładnie opisywać nie ma sensu bo za dużo tego jak na jeden post) po więcej zapraszam do "PHP5. Zaawansowane programowanie" smile.gif

Co do singletona metoda z Zend_Db_Table_Abstract:
  1.  
  2. public static function getDefaultAdapter()
  3. {
  4. return self::$_defaultDb;
  5. }


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.