Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zastosowanie getInstance
rasgan
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 30.05.2007
Skąd: Kleszczów

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


Witam, napisałem sobie klasę SQL do obsługi bazy. Nic nadzwyczajnego. Mam też dwie inne klasy: Extenstion (ładuje mi klasy rozszerzeń) i klasę Auth (klasa z autoryzacja uzytkownika). Na czym polega problem? Nie umiem się w klasie Auth odwołać do bazy danych. Podam kod i może będzie jaśniej:

Część kalsy SQL
  1. <?php
  2. public static function init( $host, $user, $pass, $dbname, $p = false )
  3. {
  4. if ( !self::$instance instanceof self )
  5. {
  6. self::$instance = new Wolf_MySQL_DBE( $host, $user, $pass, $dbname, $p = false );
  7. }
  8. return self::$instance;
  9. }
  10. ?>


Klasa extension
  1. <?php
  2. class Extension
  3. {
  4. public $db;
  5. public $auth;
  6.  
  7. public function __construct()
  8. {
  9. $this->db = SQL::init( 'localhost', 'root', '', 'test', false );
  10. $this->auth = AUTH::init();
  11. }
  12. }
  13. ?>


i klasa AUTH (jej część)
  1. <?php
  2. class AUTH extends Extension {
  3. private static $instance;
  4.  
  5. public static function init()
  6. {
  7. if ( !self::$instance instanceof self )
  8. {
  9. self::$instance = new AUTH();
  10. }
  11. return self::$instance;
  12. }
  13. function login( $login, $pass )
  14. {
  15. echo "<p>------------------------------------------------------</p>";
  16.  
  17. echo "<p>------------------------------------------------------</p>";
  18. }
  19. }
  20. ?>


Nie wiem w jaki sposób odwołać sie w metodzie login do bazy danych. Próbowałem poprzez $this->db->setSql(), przez $db->setSql(), setSql i nic, dostaję komunikat
Kod
Call to a member function set_sql() on a non-object inobject


Co robię źle? Widziałem podobny mechanizm u kumpla, ale on siedzi w wojsku i nie ma mi jak wyjaśnić co zrobił :/

Ten post edytował rasgan 13.07.2007, 10:39:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rasgan
post
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 30.05.2007
Skąd: Kleszczów

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


Kicok, dziękuję ślicznie. Właśnie o coś takiego mi chodziło.

Ja siedziałem też nad problemem trochę w sobotę i znalazłem takie rozwiązanie:

  1. <?php
  2.  
  3. class a
  4. {
  5. public static function & getInstance()
  6. {
  7. static $instance;
  8. if ( !isset( $instance ) )
  9. {
  10. $instance = new a;
  11. }
  12. return $instance;
  13. }
  14.  
  15. public function fca()
  16. {
  17. echo 'klasa a';
  18. }
  19. }
  20.  
  21. class c extends b
  22. {
  23. public static function & getInstance()
  24. {
  25. static $instance;
  26. if ( !isset( $instance ) )
  27. {
  28. $instance = new c;
  29. }
  30. return $instance;
  31. }
  32.  
  33. public function fcc()
  34. {
  35. echo 'klasa c <br />';
  36. $this->a->fca();
  37.  
  38. }
  39. }
  40.  
  41. class b
  42. {
  43. public $c;
  44. public $a;
  45.  
  46. public static function & getInstance()
  47. {
  48. static $instance;
  49. if ( !isset( $instance ) )
  50. {
  51. $instance = new b;
  52. }
  53. return $instance;
  54. }
  55.  
  56. public function __construct()
  57. {
  58. $this->a = a::getInstance();
  59. }
  60.  
  61. public function pokaz()
  62. {
  63. echo '<pre>';
  64. print_r($this);
  65. echo '</pre>';
  66. }
  67. }
  68.  
  69. $db = c::getInstance();
  70.  
  71. /* @var $db c */
  72. $db->pokaz();
  73. $db->a->fca();
  74. $db->fcc();
  75.  
  76. ?>


------
EDIT
------

Po krótkich testach doszedłem do wniosku, że Twoje podejście jest bardziej uniwersalne od mojego. Wystarczy, że utworzę sobie swój nowy obiekt typy Extension i już mam dostęp do wszystkich rozszerzeń jakie potrzebuję. A wiesz może jak napisać by ZEND obsługiwał podpowiedzi dla takiej składni?

Ten post edytował rasgan 16.07.2007, 08:39:56
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: 4.10.2025 - 13:02