Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Klasy, Klasa A widoczna przez klasę B ...
Eagle
post
Post #1





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

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


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ć :<
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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. ?>
Go to the top of the page
+Quote Post
Eagle
post
Post #3





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

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


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.
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Eagle
post
Post #5





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

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


Dzięki wielkie winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 22:00