Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Korzystanie z jednej klasy w drugiej...pytanie?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Joachim Peters
Witam,

Dopiero zaczynam przygode z klasami, dlatego proszę was o porade.
  1. <?php
  2. class SQL
  3. {
  4. // jakis kod klasy
  5. }
  6. $db = new SQL();
  7.  
  8. class fva
  9. { 
  10. function fva() 
  11. { 
  12. global $db; 
  13. $db->sql_query("SELECT * FROM jakas_tabela LIMIT 1"); 
  14. } 
  15.  
  16. }
  17. ?>

Czy ten skrypt jest do bani?
Bo dostałem taką opinie:
Cytat
po co globalny obiekt jak .. tylko w klasie potrzebuje ? pomijajac totalny bezsens tego rozwiazania to moze on jeszcze bledy powodowac.
ikioloak
Temat czesto poruszany na forum wiec szukaj. Podpowiem, czesto spotykanymi rozwiazaniami jest korzystanie z wzorca Singleton, lub przekazanie obiektu $db do metod fva.
eS...
Hmm w sumie też tylko raczkuje w OOP ale może chodzi o to
  1. <?php
  2. class SQL{
  3.  // jakis kod klasy
  4. }
  5.  
  6.  
  7. class fva extends SQL{ 
  8.  
  9.  function fva() { 
  10. parent::sql_query('SELECT * FROM jakas_tabela LIMIT 1'); 
  11. //SQL::sql_query('SELECT * FROM jakas_tabela LIMIT 1'); 
  12.  } 
  13.  
  14. }
  15. ?>

rozumiem ze sql_query() to funkcja z klasy SQL

Jeżeli chodzi o kozystanie z jednej klasy(metod) w drugiej to chyba tylko dziedziczenie. Po co mu singleton?(nie krzyczcie wytłumaczcie)
splatch
Proszę, zapamiętaj to jedno zdanie smile.gif
Global w klasach mówimy stanowcze NIE!
Turgon
eS...: Podpowiem Ci, że skoro dziedziczysz metoda sql_query staje się nie jako nową metodą klasy fva i nie musisz używać parent smile.gif . Po za tym polecam Ci poszukać o takmi wzorcu: "my regedit".
eS...
No ok, rozumiem smile.gif ale z parent też zadziała? Naprawde w OOP jestem beginer
em1X
no raczej zadziała, skoro odwołujesz się do klasy, z której dziedziczysz (pod warunkiem, że nie jest metodą prywatną), tylko dalej nie rozumiem do czego dążysz biggrin.gif

I jak wspomnieli poprzednicy: pisz skrypty tak, zeby nie uzywac global'a. Global mozna uniknac stosujac wzorzec Singleton.
eS...
@em1X - ja tylko pytam, a global to nie mojego autorstwa. Ten topic nie jest w ogóle mojego autorstwa biggrin.gif
Turgon
Z parent zadziała, ale to jest brzydkie ;] Według mnie napisz sobie klasę rejestr, w której będziesz składował instancje obiektów. Jakbyś nie wiedział instancje, to utworzone obiekty danej klasy ;]
eS...
Cytat(Turgon @ 12.01.2007, 17:21:26 ) *
Z parent zadziała, ale to jest brzydkie ;] Według mnie napisz sobie klasę rejestr, w której będziesz składował instancje obiektów. Jakbyś nie wiedział instancje, to utworzone obiekty danej klasy ;]

Cóż mój błąd smile.gif. ale wyczytałem tak w jednej z książek .
Joachim Peters
Poczytałem trochę o singletonie, ale nadal nie wiem jak stosować to w praktyce.
Proszę o mały przykład użytkowania.
Cysiaczek
Z wzorcami to jest tak, że się nie powinno wdrażać na siłę.
http://forum.php.pl/index.php?showtopic=52...mp;hl=singleton
http://forum.php.pl/index.php?showtopic=59...mp;hl=singleton
http://forum.php.pl/index.php?showtopic=55...mp;hl=singleton
http://forum.php.pl/index.php?showtopic=55...mp;hl=singleton

  1. <?php
  2. class my_Class {
  3.  
  4. /**
  5.  * Zawiera instancję tej klasy
  6.  * @var object static
  7.  */
  8. private static $instance;
  9.  
  10. /**
  11.  * Testowa
  12.  * @var mixed
  13.  */
  14. public $zmienna;
  15.  
  16. private function __construct(){}
  17.  
  18. public static function getInstance(){
  19.  
  20. if (!self::$instance){
  21. self::$instance=new self();
  22. }
  23. return self::$instance;
  24. }
  25. }
  26.  
  27. class test {
  28.  
  29. public function __construct(){
  30. $obj=my_Class::getInstance();
  31. print $obj->zmienna.'<br />';
  32. $obj->zmienna="zostałam ustawiona w klasie test";
  33. }
  34.  
  35. public function odczytaj_raz_jeszcze(){
  36. $obj=my_Class::getInstance();
  37. print $obj->zmienna.'<br />';
  38. $obj->zmienna="i jeszcze raz mnie zmieniono";
  39. }
  40.  
  41. }
  42.  
  43. $obj=my_Class::getInstance();
  44. $obj->zmienna="zostałam ustawiona poza klasą test";
  45.  
  46. $test=new test();
  47.  
  48. print $obj->zmienna.'<br />';
  49.  
  50. $test->odczytaj_raz_jeszcze();
  51.  
  52. print $obj->zmienna.'<br />';
  53. ?>


Wnioskuję o uznanie tematu Singleton tematem spamem : ). Jest pełno.

Pozdrawiam.
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.