Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Używanie obiektu w innej klasie
Forum PHP.pl > Forum > Przedszkole
JohnySpot
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 :/
dr_bonzo
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
JohnySpot
Z global próbowałem ale się niestety nie udało :/
Skobi
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. ?>
JohnySpot
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 ?
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.