Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dostep do danych obiektow
Forum PHP.pl > Forum > PHP
Spooky2
Witam. Jestem kompletnie zielony w temacie programowania obiektowego - probuje zmienic przyzwyczajenia.
Mam pytanie, poniewaz nie dysponuje odpowiednia literatura.
Czy mozliwy jest bezposredni dostep do danych jednej klasy z poziomu metody innej klasy (nie wiem czy to ujalem)
Moze to zobrazuje.
  1. $fak = new faktura_int;
  2. $fak -> licz_fak_int_zap($id_dokumenut, $id_klienta);
  3. $fak -> licz_fak_int($id_dokumentu);
  4. $fak -> licz_fak_int_sprawdz_opcje();
  5. $fak -> licz_fak_int_licz_czas();
  6. $fak -> licz_fak_int_licz_rabat();
  7. $fak -> licz_fak_int_licz_rabat_ext2();
  8. $fak -> licz_fak_int_licz_wart();
  9. $fak -> licz_fak_int_dane_firmy();
  10. ///ok, powyzsze funkcje wyprodukowaly jakies dane (tyle, ze ich nie zwracaja)
  11. // do danych odwoluje sie ciagle w kolejnych metodach tej klasy tak: $this->$jakas_zmienna = cos_tam*$this->$jakas_zmienna :-)
  12. $klient = new uzytkownik;
  13. //i w tym miejscu chcialbym operowac na danych "wyprodukowanych" przez metody klasy faktura_int
  14. //chcialbym uzyskac zatem dostep w ponizszej funkcji do np $this->$jakas_zmienna
  15. $klient -> generuj_zaw_pdfa_fv();


Czy jedynym sposobem, jest utworzenie w klasie faktura_int funkcji zwracajacej wszystkie zmienne z poszczegolnych metod klasy w postaci np tablicy,
a nastepnie wywolanie danej metody w metodzie klasy uzytkownik? ($jakas_zmienna (w danej metodzie) = $fak -> zwroc_dane()wink.gif

Mam nadzieje, ze w miare udalo mi sie opisac problem
darko
nie:
// do danych odwoluje sie ciagle w kolejnych metodach tej klasy tak: $this->$jakas_zmienna = cos_tam*$this->$jakas_zmienna :-)
a:
// do danych odwoluje sie ciagle w kolejnych metodach tej klasy tak: $this->jakas_zmienna = cos_tam* $this->jakas_zmienna :-)
:-)
Spooky2
Oczywisty blad z mojej strony, ale wiadomo, parser i tak by tego nie puscil...
darko
Czy to rozwiązuje Twój problem, bo trochę namieszałeś?
Cytat
Czy mozliwy jest bezposredni dostep do danych jednej klasy z poziomu metody innej klasy

Co rozumiesz jako "bezpośredni dostęp"? Powinieneś przekazać obiekt jako parametr metody i wtedy za pomocą getterów (lub bezpośrednio właśnie ale tylko do pól publicznych) możesz dostać się do interesujących Cię danych. Bezpośredni dostęp jest możliwy tylko do pól publicznych, natomiast dostęp do wszystkich danych obiektu nie powinien być możliwy, gdyż byłoby to sprzeczne z założeniem hermetyzacji. Najczęściej jest tak, że w trakcie implementacji konkretnej klasy dzieli się dane na te tylko do użytku przez obiekt i na te, będące wynikiem jakiś działań, do których można się odwołać za pomocą odpowiednich metod (poczytaj o getterach i setterach). Danym wewnętrznym nadaje się modyfikator private lub protected, natomiast w przypadku danych publicznych albo stosuje się modyfikator protected i udostępnia odpowiednie metody (gettery i settery) albo używa się metod magicznych, albo też (co nie jest dobre) nadaje się dostęp publiczny.

Cytat
ok, powyzsze funkcje wyprodukowaly jakies dane (tyle, ze ich nie zwracaja)

za mało kodu dałeś, nie znamy implementacji tych metod, skoro nic nie zwracają, to czy aby na pewno na końcu ciała metody jest instrukcja return <COŚ_TAM>? Czy te metody przypisują jakieś dane do pól obiektu? Tego nie wiemy.

A tak na marginesie:
Cytat
nie dysponuje odpowiednia literatura

proszę Cię, są miliony artykułów w sieci na temat programowania obiektowego, wystarczy przejrzeć pierwsze wyniki od google.
Spooky2
OK, ide poszukac czegos dla siebie na helionie.
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.