Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak wprowadzić zmienną z zewnątrz do wnętrza klasy?
bartolomeo
post 3.05.2009, 18:03:25
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


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
Go to the top of the page
+Quote Post
LBO
post 3.05.2009, 18:08:15
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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. ?>


Ten post edytował LBO 3.05.2009, 18:12:50
Go to the top of the page
+Quote Post
bartolomeo
post 3.05.2009, 18:15:50
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


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 ?
Go to the top of the page
+Quote Post
LBO
post 3.05.2009, 18:20:59
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


W miejscu który czyta Twoje pliki konfiguracyjne i na Ich podstawie tworzy odpowiednie obiekty.
Go to the top of the page
+Quote Post
Roly
post 26.05.2009, 22:54:48
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 7
Dołączył: 8.12.2003
Skąd: Andrychów

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


Jeszcze inna metoda to skorzystanie z wzorca registry, ewentualnie singellton.


--------------------
adminvps.pl
Go to the top of the page
+Quote Post
bim2
post 27.05.2009, 15:17:42
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Hmm, ja w modelu robię extends AppModel i w AppModel singletonem pobieram to co potrzebuje. smile.gif


--------------------
Go to the top of the page
+Quote Post
Procesor
post 3.06.2009, 19:06:18
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 17.12.2008

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


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ć.

Ten post edytował Procesor 3.06.2009, 19:07:37
Go to the top of the page
+Quote Post
Whisller
post 4.06.2009, 22:14:34
Post #8





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


Dependency injection


--------------------
Blog | Strona www | wicia.pl
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: 21.06.2025 - 12:05