Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Używanie obiektu w innej klasie
JohnySpot
post 20.09.2006, 09:57:39
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Włocławek

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


Tworzę sobie obiekt $mysql klasy mysqli.
Chciałbym w innej klasie (user) odwoływać się do niego: $mysql->query($zapytanie). Ale niestety pisze, że nie znaleziono takiego obiektu. Każda klasa jest w osobny pliku, robię require_once do głównego pliku później tworze obiekty, ale to nic nie daje :/


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
dr_bonzo
post 20.09.2006, 10:08:45
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Jesli tworzysz ten obiekt poza klasa user to nie bedzie on dostepny. Masz kilka opcji:
1.
  1. <?php
  2. $user = new User( $mysql );
  3.  
  4. public function __construct( $_db )
  5. {
  6. $this->db = $_db;
  7. }
  8. ?>


2. polaczenie z baza jako Singleton

3. Rejestr, Service locator -- ale to chyba zbyt skomplikowane jak na poczatek
PS. o global nawet nie wspominam


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
JohnySpot
post 20.09.2006, 10:41:13
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Włocławek

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


Z global próbowałem ale się niestety nie udało :/


--------------------
Go to the top of the page
+Quote Post
Skobi
post 20.09.2006, 11:00:14
Post #4





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

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


ja robie tak:

  1. <?php
  2. final class DB
  3. {
  4. private static $objADOdb;
  5.  
  6. private function __construct()
  7. {
  8. }
  9.  
  10. public static function Connect()
  11. {
  12. if ( self::$objADOdb == null )
  13. {
  14. self::$objADOdb = NewADOConnection('postgres');
  15. self::$objADOdb->Connect( 'host', 'user', 'haslo', 'dbname', 'port' );
  16. self::$objADOdb->SetFetchMode(ADODB_FETCH_ASSOC);  
  17. }
  18. return self::$objADOdb;
  19. }
  20. }
  21. ?>


to jest z uzyciem ADOdb, ale myślę, że bardzo szybko się polapiesz jak przerobic to po swojemu.

a użyc możesz tego tak:

  1. <?php
  2. $strQuery = 'SELECT * FROM TEST';
  3. DB::Connect()->GetArray( $strQuery );
  4. ?>
Go to the top of the page
+Quote Post
JohnySpot
post 20.09.2006, 11:06:31
Post #5





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Włocławek

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


To jest mój singletone:

  1. <?php
  2. class mysql extends mysqli {
  3.  protected static $singletone = NULL; 
  4.  
  5.  protected function __construct() {}
  6.  
  7.  public static function &singletone($host,$login,$haslo,$baza) {
  8. if (self::$singletone == NULL) {
  9. self::$singletone = new mysql();
  10. parent::connect($host,$login,$haslo,$baza);
  11. }
  12. return self::$singletone;
  13.  
  14.  }
  15. }
  16. ?>


Tylko to w tej chwili nawala:

Fatal error: Non-static method mysqli::connect() cannot be called statically in /home/johny/public_html/klasy/mysql.php on line 10

I teraz ja mam tworzyć "obiekt" tej klasy w każdej z klas, której będę używał MySQL-a ?

Ten post edytował JohnySpot 20.09.2006, 11:12:55


--------------------
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: 18.07.2025 - 02:24