Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazanie klasy do innej klasy, Przekazanie klasy do innej klasy
vadergb
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

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


Dotychczas piszac skrypty np. chcac przekazac dostepne rzeczy z klasy obslugi bazy danych robilem to na zasadzie przekazania jej do nastepnej.

cos typu:
$klasa = news baza();
$klasa2 = news baza($klasa);

i potem np w klasa2:
  1. class klasa2 {
  2. private $mysqli;
  3. public function __construct(mysqli $mysqli) {
  4. $this->mysqli = $mysqli;
  5. }
  6. public function findAllNews() {
  7.  
  8. $result = $this->mysqli->query ( "SELECT * FROM my_news where title='DEU' limit 2" );
  9. $result_arr = array ();
  10. while ( $data = $result->fetch_object () ) {
  11. $result_arr [] = $data;
  12. }
  13. return $result_arr;
  14.  
  15. }
  16. }

Czy jest to najwydajniejszy sposob?

Czy jest mozliwosc zrobienia klasy publicznej nie uzywajac singletona?

Przy wiekszej ilosci klas do przekazania robi sie balagan:

np. trzeba przekazac klasy: obsluga bazy danych, obsluga $_POST (itp.), Klasa obslugujaca Sesje, Klasa ACL - i jeszcze kilka by sie znalazlo...
Te klasy powinny byc tak na dobra sprawe dostepne prawie wszedzie w kazdej innej klasi - Czy jest jakis inny sposob na przekazanie jej do innej klasy innym sposobem niz singleton?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vadergb
post
Post #2





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

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


hmm a jakby zrobil cos w stylu:


  1. $obiekt1=new obiekt();
  2. $obiekt2=new obiekt1($obiekt1);
  3. $obiekt3=new obiekt2($obiekt2);
  4.  


Klasy:
  1. class obiekt{
  2. public function __construct(klasa $obiekt1) {
  3.  
  4. }
  5. public function show() {
  6. echo 'a';
  7. }
  8. ...
  9. }
  10. class obiekt1{
  11. private $obiekt1;
  12. public function __construct(klasa $obiekt1) {
  13. $this->obiekt1= $obiekt1;
  14.  
  15. }
  16. ...
  17.  
  18. }
  19. class obiekt2{
  20. private $obiekt2;
  21. public function __construct(klasa $obiekt2) {
  22. $this->obiekt2= $obiekt2;
  23. $this->obiekt2->obiekt1->show();
  24. }
  25. ...
  26.  
  27. }


tylko ze potem wywolac cos z obiektu w obiekcie 2 to trzeba robic : $this->obiekt2->obiekt1->show(); co wydluza kod. Moze daloby sie go jakos skrocic?


Moze ze cos takiego:
register class
  1. <?php
  2.  
  3. Class Registry {
  4.  
  5. private $vars = array();
  6.  
  7.  
  8. public function __set($index, $value)
  9. {
  10. $this->vars[$index] = $value;
  11. }
  12.  
  13. public function __get($index)
  14. {
  15. return $this->vars[$index];
  16. }
  17.  
  18.  
  19. }
  20.  
  21. ?>

index i 3 klasy
  1. class obiekt {
  2. public $mysqli;
  3. protected $registry;
  4.  
  5. function __construct( $registry) {
  6. $this->registry = $registry;
  7.  
  8. }
  9.  
  10. }
  11. class obiekt1 {
  12. protected $registry;
  13.  
  14. function __construct( $registry) {
  15. $this->registry = $registry;
  16.  
  17. }
  18. public function show() {
  19. echo 'a';
  20. }
  21.  
  22. }
  23. class obiekt2 {
  24. protected $registry;
  25. public function __construct( $registry) {
  26. $this->registry = $registry;
  27.  
  28. }
  29. }
  30.  
  31. $registry = new registry ( );
  32. $registry->obiekt = new obiekt ( $registry );
  33. $registry->obiekt1 = new obiekt1 ( $registry );
  34.  
  35. $registry->obiekt2 = new obiekt2 ( $registry );
  36. $registry->obiekt1->show();


Dzieki temu nie musimy robic:$registry->obiekt2->obiekt1->show(); itd.
odwolujemy sie tylko $register->nazwaklasy->funkcja();

Wydaje sie pomysl z register chyba najbardziej optymalny i najlepszy. nie musimy nigdzie martwic sie o klasy. Wszedzie je mamy. Teraz pytanie czy jest on wydajny?



Ten post edytował vadergb 18.08.2009, 14:05:37
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.06.2026 - 11:20