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%)
-----


Nie ma setSql bo nie wkleiłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Musiałbym całą klasę SQL wkleić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

dam jeszcze raz co mam i co chcę osiągnąć:
  1. <?php
  2. class SQL
  3. {
  4. function init()
  5. { utworzenie instancji klasy SQL }
  6. function setSql()
  7. { }
  8. }
  9.  
  10. class Auth extends Extension
  11. {
  12. function init()
  13. { utworzenie instancji klasy auth }
  14. function login()
  15. {
  16.  //tutaj chciałbym by można było korzystać z metod klasy SQL w taki sposób
  17. $this->db->setSQL();
  18. }
  19. }
  20.  
  21. class Extension
  22. {
  23. public $db;
  24. public $auth;
  25.  
  26. public function __construct()
  27. {
  28. $this->db = Wolf_MySQL_DBE::init( 'localhost', 'root', '', 'test', false );
  29. $this->auth = AUTH::init();
  30. }
  31. }
  32.  
  33. // tworze obiekt na którym wykonuje moje metody
  34. $d = new Extension;
  35. $d->auth->login();
  36. $d->db->setSQL();
  37. ?>


Jak zrobić, by można było w taki sposób odwoływać się do tych rzeczy? Kumpel ma tak, że sobie utworzył jeden obiekt $strona i na nim wykonuje metody np:
  1. <?php
  2. $strona = new Extension;
  3. $strona->auth->login();
  4. if ($strona->auth->isLogged)
  5. {
  6. echo 'zalogowany';
  7. $strona->db->setSQL();
  8. echo $strona->db->getRows();
  9. }
  10. else
  11. {
  12. echo 'Zaloguj sie';
  13. }
  14. ?>


Coś takiego chciałbym osiągnąć, bo uważam, ze nieźle to działa, sprawdza się i przyzwyczaiłem się do tego, ale muszę dopisać kilka swoich rzeczy, a nie wiem jak je później wykorzystać w jego mechaniźmie. W moim własnym, też by mi się przydało coś takiego.

--------
-EDIT-
--------
Zauważyłem, że jak dam w klasie AUTH w konstruktorze linijkę
  1. <?php
  2. $this->db = SQL::getInstance();
  3. ?>
to wtedy działa idealnie, ale nie moge przecież w każdej klasie pobierać instancji każdej klasy, od tego chce mieć klasę extension w której mi to będzie robił automat.

Ten post edytował rasgan 13.07.2007, 13:32:14
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: 9.10.2025 - 19:21