Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak wprowadzić zmienną z zewnątrz do wnętrza klasy?
Forum PHP.pl > Forum > PHP > Object-oriented programming
bartolomeo
Witam,



Jak wprowadzić zmienną do wnętrza klasy? Przykładowo mam klasę UserModel i wewnątrz chce wywołać klasę MySQLConnect, której argumentami są $hostname, $username, $password, które z kolei mam zapisane w osobnym pliku np connect.conf.php? smile.gif
LBO
Przekazujesz już utworzony obiekt MySQLConnect do UserModel np.

  1. <?php
  2. // gdzieś w kodzie pobierasz $hostname, $username, $password i...
  3. $database = new MySQLConnect($hostname, $username, $password);
  4.  
  5. $user = new UserModel();
  6. $user->setDatabaseConnection($database);
  7. ?>


edit:

hehehe no i oczywiście szkielet klasy UserModel:

  1. <?php
  2. class UserModel
  3. {
  4.    protected $database;
  5.  
  6.    // Zakładam, że MySQLConnect dziedziczy po jakiejś ogólnej klasie łączenia z bazami (DatabaseConnect) danych (nie tylko MySQL).
  7.    public function setDatabaseConnection(DatabaseConnect $database)
  8.    {
  9.        $this->database = $database; // i od teraz masz już instancje np. MySQLConnect dostępną wewnątrz obiektu.
  10.    }
  11. }
  12. ?>
bartolomeo
Cytat(LBO @ 3.05.2009, 19:08:15 ) *
Przekazujesz już utworzony obiekt MySQLConnect do UserModel np.

  1. <?php
  2. // gdzieś w kodzie pobierasz $hostname, $username, $password i...
  3. $database = new MySQLConnect($hostname, $username, $password);
  4.  
  5. $user = new UserModel();
  6. $user->setDatabaseConnection($database);
  7. ?>




czyli pisząc zgodnie z MVC, mam tak:
Klasę MySQLConnect (Model DAO) - która jest odpowiedzialna tylko i wyłącznie za połączenie z bazą danych, oraz obsługującą poszczególne zapytania SQL.
Klasę UserModel (jeden z Modeli) - która by np zalogować użytkownika musi sprawdzic czy taki istnieje w bazie.

Więc gdzie umieszczam to co napisałeś? W kontrolerze? tzn klasie jakiejś akcji ? np UserListAction.class.php ?
LBO
W miejscu który czyta Twoje pliki konfiguracyjne i na Ich podstawie tworzy odpowiednie obiekty.
Roly
Jeszcze inna metoda to skorzystanie z wzorca registry, ewentualnie singellton.
bim2
Hmm, ja w modelu robię extends AppModel i w AppModel singletonem pobieram to co potrzebuje. smile.gif
Procesor
Jeśli chodzi o jakiś config, do którego dostep możesz uzyskać z dowolnego miejsca w kodzie - możesz stworzyć klasę z statyczną zmienną, do której jednorazowo załadujesz configa np.

  1. <?php
  2. class C
  3. {
  4.  public static $c;
  5.  public static function load($a)
  6.  {
  7.      self::$c = $a;
  8.  }
  9. }
  10.  
  11. $config['cos'] = 'bla';
  12. $config['bla']['bla'] = 'cos';
  13.  
  14. C::load($c);
  15.  
  16. //i odtad mozesz wywołac to wszedzie np.
  17.  
  18. echo C::$c['cos'];
  19. ?>


Oczywiście to tylko przykładowa klasa, można by ją rozszerzyć.
Whisller
Dependency injection
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.