Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: konstruktor klasy dziedziczonej
Forum PHP.pl > Forum > PHP > Object-oriented programming
barii
Chce właśnie stworzyć klasę obsługującą bazę danych. W jej konstruktorze chciałbym połączyć się z bazą danych.

  1. <?
  2. class datebase{
  3.  
  4. function __construct(){
  5. // połączenie z bazą danych
  6. }
  7.  
  8. function createTable($parametry){
  9. // tworzenie tablicy
  10. }
  11.  
  12. function getDateTable(){
  13. // pobieranie danych z tabeli
  14. }
  15.  
  16. ... // pozostałe metody
  17.  
  18. }
  19. ?>


W przypadku dziedziczenia tej klasy

Chce właśnie stworzyć klasę obsługującą bazę danych. W jej konstruktorze chciałbym połączyć się z bazą danych.

  1. <?
  2. class news extends datebase{
  3.  
  4. function pobierz_dane($parametry){
  5. $this->getDateTable($parametry);
  6. }
  7.  
  8. ... // pozostałe metody
  9.  
  10. }
  11. ?>


Czy jak wykonam skrypt
  1. $news -> $news();
  2.  
  3. $news-> pobierz_dane($parametry);



to zawsze konstruktor klasy datebase połączy się z bazą?
marcio
Uzywaj php5.
W kalsie news dodajesz takie cos:
  1. public function __construct() {
  2.  
  3. parent::__construct();
  4.  
  5. }

I tyle.
A tak w ogole to klasa news nie ma nic wspolnego z klasa database po co ona ja rozszerza, powinienes przeyslas instancje klasy database do konstruktora klasy news czyli:
  1. class news {
  2.  
  3. private $db;
  4.  
  5. public function __construct(Database $db) { //lub $db
  6.  
  7. $this->db = $db; //tu masz polaczenie bazy danych
  8.  
  9. }
  10.  
  11. //reszta kodu
  12.  
  13. }
LBO
Tak, chyba, że go nadpiszesz.

  1. // A łączy się z bazą w konstruktorze
  2. class A {
  3. public function __construct() {
  4. // polaczenie z baza
  5. }
  6. }
  7.  
  8. // B nie połączy się z bazą, nadpisała konstruktor A
  9. class B extends A {
  10. public function __construct() {
  11. }
  12. }
  13.  
  14. //C połączy się z bazą, nadpisała konstruktor A, ale i tak go wywołała
  15. class C extends A {
  16. public function __construct() {
  17. parent::__construct();
  18. }
  19. }
  20.  
  21. //D połączy się z bazą, wykorzystuje konstruktor A bezpośrednio
  22. class D extends A {
  23. }


+1 dla @marcio za zwrócenie uwagi na błędy projektowe
barii
Cytat(marcio @ 15.04.2010, 13:11:16 ) *
Uzywaj php5.


Chodzi Ci o to że powinienem nadawać metodom rodzaj dostępu? czy coś jeszcze jest główną zasadą w PHP5?
marcio
No rodzja dostepu,jawne konstruktory/destruktory, klasy abstrakcyjne i interfejsy chyba tez,stale klasowe i moze jakies nowe metody magiczne.

btw: jeszcze final masz w php5 :]
phpion
@marcio:
Co w kodach z pierwszego postu wskazuje na używanie PHP4? Jak dla mnie jest to PHP5 (__construct). Jeśli uwagę twoją zwrócił fakt braku public to jest to domyślny modyfikator dostępu więc w sumie nie ma potrzeby jego pisania (aczkolwiek świadczy to o "schludności" piszącego).
marcio
Cytat(phpion @ 15.04.2010, 14:16:15 ) *
@marcio:
Co w kodach z pierwszego postu wskazuje na używanie PHP4? Jak dla mnie jest to PHP5 (__construct). Jeśli uwagę twoją zwrócił fakt braku public to jest to domyślny modyfikator dostępu więc w sumie nie ma potrzeby jego pisania (aczkolwiek świadczy to o "schludności" piszącego).

Akurat konstrukt w pierwszej klasie nie zauwazylem czytalem w pospiechu.
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-2024 Invision Power Services, Inc.