Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Korzystanie z zewnętrznej zmiennej
Forum PHP.pl > Forum > PHP > Object-oriented programming
MMySlime
Witam,

Stworzyłem więc sobie klasę łączącą się z bazy danych. Jak z niej korzystać w innej klasie?

Dopowiem że nie chcę tworzyć nowego połączenia tylko korzystać ze zmiennej utworzonej w nie klasie ale w statycznym pliku php.
Zmienna np. $db
Mianowicie mam $db->select();

Próbowałem za pomocą Extends oraz self::select(); ale jak mówiłem, nie chcę się kolejny raz łączyć z bazą.
Crozin
Najzwyczajniej w świecie przekaż tą zmienną jako argument konstruktora, a w nim przypisz ją jako właściwość obiektu?
MMySlime
A można trochę jaśniej? smile.gif
Za bardzo w OOP nie jestem obeznany :/
Damonsson
Ja bym utworzył klasę np. class Db extends PDO, gdzie w konstruktorze byłoby połączenie z bazą danych między innymi, a w modelu(statycznym pliku php) po prostu tworzył sobie nowy obiekt klasy Db ($db = new Db()).

I odwoływał się w modelu(statycznym pliku php) normalnie tak jak chcesz $db->select()

Jak chcesz wykonać jakieś zapytanie to przecież musisz się połączyć z bazą danych, więc jak nie chcesz się łączyć? Nie rozumiem tego.
MMySlime
Tak więc:
1. Wykonałem sobię klasę łączącą z bazą dancyh poprzez PDO, jest includowana jako pierwsza w pliku.
2. Zmienną połączyłem się w pliku statycznym "poprzez" tą klasę.
3. Chciałbym teraz zrobić klasę Wykorzystującą tą zmienną tylko że jak próbuję odnieść się do niej to wywala mi błąd że taka zmienna nie istnieje.

Może ja pokażę plik statyczny (index.php):
  1. foreach (glob('Classes/First/*.php') as $file)
  2. include $file;
  3.  
  4. $db = new DBH();
  5.  
  6. $db->host = 'host';
  7. $db->user = 'user';
  8. $db->pass = 'pass';
  9. $db->base = 'base';
  10.  
  11. $db->connect();
  12.  
  13. foreach (glob('Classes/After/*.php') as $file)
  14. include $file;
  15.  
  16. $auth = new Auth();
  17.  
  18. if(!empty($_POST[$auth->post_nick]) && !empty($_POST[$auth->post_pass])){
  19.  
  20. $auth->login();
  21.  
  22. }


I chciałbym zmienną db wykorzystać w tej klasie, jednak jest błąd :/
Crozin
1. Operujesz na obiektach, nie klasach.
2.
  1. $dbh = new DBH();
  2.  
  3. $auth = new Auth($dbh);
  4.  
  5. // ----
  6.  
  7. class Auth {
  8. private $dbh;
  9.  
  10. public function __construct(DBH $dbh) {
  11. $this->dbh = $dbh;
  12. }
  13. }
MMySlime
Wielkie dzięki, właśnie o to chodziło wink.gif
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.