Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Klasy
Forum PHP.pl > Forum > Przedszkole
Eagle
Witam

Jak zrobić aby klasa B mogła korzystać z funkcji klasy A (i aby debugger (phpDesign 2008) nie krzyczał tongue.gif)?

index.php
  1. <?php
  2. include 'a.php'; // klasa od bazdy danych
  3. include 'b.php'; // klasa używająca bazy danych
  4.  
  5. $obj_DB = new c_DB(db_host,db_user,db_pass);
  6. $obj_COS = new c_uzywam_bazy();
  7. ?>


a.php
  1. <?php
  2. class c_DB
  3. {
  4.  
  5. public function __construct($db_host,$db_user,$db_pass)
  6. {
  7. #Łączenie sie z bazą itp.
  8. }
  9.  
  10. public function funkacja_bazy()
  11. {
  12. ...
  13. }
  14. }
  15. ?>


b.php
  1. <?php
  2. class c_uzywam_bazy
  3. {
  4. public function abc()
  5. {
  6. # TUTAJ CHCE SIĘ ODWOŁAĆ DO FUNKCJI 'funkcja_bazy' w klasie 'c_DB'
  7. }
  8.  
  9. }
  10. ?>


Wcześniej używałem
  1. <?php
  2. $GLOBALS['obj_DB']->funkacja_bazy();
  3. ?>

Ale zmienne globalne są złe i nie wiem jak to inaczej zrobić :<
phpion
Może przypisz jeden z obiektów do któregoś pola w innym np.:
  1. <?php
  2. class A {
  3. private $b;
  4.  
  5. public function __construct() {
  6. echo 'Konstruktor A';
  7.  
  8. $this->b = new B();
  9. }
  10.  
  11. public function doSomething() {
  12. return $this->b->sayHallo();
  13. }
  14. }
  15.  
  16. class B {
  17. public function __construct() {
  18. echo 'Konstruktor B';
  19. }
  20.  
  21. public function sayHallo() {
  22. return 'Hallo :)';
  23. }
  24. }
  25.  
  26. $obj = new A();
  27. echo $obj->doSomething();
  28. ?>
Eagle
Tak chciałem zrobić na początku, tylko że będą dostępne jeszcze pluginy / moduły, a ilość klas które będą się odwoływały do klasy bazy danych jest również dość duża.
nevt
więc uczyń obiekt bazy parametrem kontruktora obiektów w których będziesz jej używał - dzięki temu ten sam obiekt bazy możesz przekazać do wielu różnych obiektów... np.
  1. <?php
  2. $db = new database(....);
  3. $obj1 = new Obj1($db);
  4. $obj2 = new Obj2($db);
  5. ?>

jeżeli jednak twoje obiekty używają bazy sporadycznie, to zamiast tego polecam jawne przekazywanie obiektu bazy danych do konretnej metody obiektu - wtedy masz najwiekszą elestyczność... np.
  1. <?php
  2. $db1 = new database(...); // jakas baza...
  3. $db2 = new database(...); // jakas inna baza...
  4. $dane = new dane();
  5. $dane->odczytaj_dane($db1);
  6. $dane->zapisz_dane($db2);
  7. ?>

a i kod jest wtedy bardzo czytelny bo od razu widać jaki obiekt operuje na jakiej bazie...

powodzenia.
Eagle
Dzięki wielkie winksmiley.jpg
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.