Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] OOP - jak przekazać obiekt do innej klasy
Vengeance
post 27.07.2004, 19:37:58
Post #1





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


clasa 'kernel' w pliku index.php inicjuje np. sterownik sql i inne
oraz wczytuje odpowiedni moduł.

Kod
<?php
class kernel
{
   function kernel($action = 'index')
   {
      include_once('db.class.php');
      $db = new db_class();

      include('mod.'.$action.'.php');
      $mod = new $action;
      echo $mod->module_start();
   }
}
$kernel = new kernel($_GET["action"]);
?>


klasa 'module'
Kod
<?php
class module
{
   function module_start()
   {
      // tu jakies pobieradnie np. newsow z bazy
      // i oddanie wyniku
      return $costam;
   }
}
?>

No i całość wywołujemy np. przez index.php?action=module

Pewnie jest tu wiele błędów bo nie pojmuje wszystkich założeń OOP ale z chęcią wysłucham uwag.
A główne pytanie brzmi:
Jaki wg. was sposób jest najlepszy na przekazywanie obiektu clasy 'db_class' do klasy 'module'.
Jak powinienem to zrobić aby było zgodnie z OOP. Wiele osób stosuje
dyrektywe global i globalizują obiekty ale to raczej nie podchodzi pod OOP.

Robić to przez singleton i np. w klasie 'module' wywoływać $db = db_class::getInstance();
a potem operować na pobranym obiekcie

Jakie macie doświadczenia bo ja nie do końca kumam całe to pisanie obiektowe
Częściej stosuje klasy jako zwykłe pojemniki na funkcje.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
ksiadz
post 27.07.2004, 22:03:00
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 24.11.2003

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


Cytat
No i całość wywołujemy np. przez index.php?action=module

ja bym az tak nie ufal uzytkownikowi by pobieral nazwe modulu bezposrednio worriedsmiley.gif
Cytat
Jaki wg. was sposób jest najlepszy na przekazywanie obiektu clasy 'db_class' do klasy 'module'.
Jak powinienem to zrobić aby było zgodnie z OOP. Wiele osób stosuje
dyrektywe global i globalizują obiekty ale to raczej nie podchodzi pod OOP.

moim zdaniem globalizacja to najlepszy sposob poniewaz mosialbys wszedzie przesylac obiekt do sterowania bazy przez referecje a prawdziwego OOP nigdy nie doznasz piszac w php


--------------------
If you can't find a program that does what you want it to do, then write your own.
Go to the top of the page
+Quote Post
Vengeance
post 28.07.2004, 01:27:32
Post #3





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Cytat
Cytat

No i całość wywołujemy np. przez index.php?action=module

ja bym az tak nie ufal uzytkownikowi by pobieral nazwe modulu bezposrednio worriedsmiley.gif

To było akurat celowe uproszczenie. wiadomo, że wcześniej zrobie odpowiednie weryfikacje ;] To tylko dla przykładu.

No a skoro twierdzisz, że globalizacja jest ok to chyba przy tym zostane.
Tylko wszyscy wszędzie jakoś tak krzyczą 'nie używaj zmiennych globalnych' ;]

Ale co tam biggrin.gif


--------------------
Go to the top of the page
+Quote Post
byther
post 28.07.2004, 07:22:27
Post #4





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.06.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Jest kilka sposobów na przekazanie obiektu. W PHP4 wygląda to mniej więcej tak:
  1. <?php
  2. class foo
  3. {
  4. function blah()
  5. {
  6. return &#092;"Działa!\";
  7. }
  8. }
  9.  
  10. class bar
  11. {
  12. var $foo;
  13. function bar( &$foo )
  14. {
  15. $this->foo =& $foo;
  16. }
  17.  
  18. function funkcja()
  19. {
  20. return $this->foo->blah();
  21. }
  22. }
  23.  
  24. $b =& new bar( new foo() );
  25. echo $b->funkcja();
  26. ?>

lub tak, jak wspominałeś - poprzez singletona
  1. <?php
  2. class foo
  3. {
  4. function &instance()
  5. {
  6. static $instance = false;
  7. if ( $instance === false )
  8. {
  9. $instance =& new foo();
  10. }
  11. return $instance;
  12. }
  13.  
  14. function blah()
  15. {
  16. return &#092;"Działa!\";
  17. }
  18. }
  19.  
  20. class bar
  21. {
  22. function funkcja()
  23. {
  24. $foo =& foo::instance();
  25. return $foo->blah();
  26. }
  27. }
  28.  
  29. $b =& new bar();
  30. echo $b->funkcja();
  31. ?>

Ale takie rzeczy to pewnie wiesz... winksmiley.jpg PHP5 zostało poprawione pod kątem OOP, więc jeżeli chcesz zacząć naukę, skorzystaj z tej wersji. A kiedy i co stosować? Hmm... Jak to ujął scanner - "najpierw trzeba nauczyć się myśleć obiektowo". A później już z górki. smile.gif


--------------------
Sygnaturka: jest
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 Wersja Lo-Fi Aktualny czas: 5.07.2025 - 14:27