Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] OOP - jak przekazać obiekt do innej klasy
Forum PHP.pl > Forum > PHP
Vengeance
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.
ksiadz
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
Vengeance
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
byther
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
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.