Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obiekt gracza
Salur
post
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 28.12.2014

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


witam, tworzę obiekt gracza (wszystkie dane uzytkownika) z którego zmiennych będę korzystał w całej grze.

Teraz pytanie, zrobiłem aby wyswietlało w tablicy czyli cos takiego:

  1. $gracz = array('level' => 1, name = 'Salur'); itd.


Teraz problem w tym że nie wiem jak z takiego obiektu dalej korzystac we wszystkich plikach. Mam umieścić go w jednym pliku i includować do każdego?

I teraz drugi, jak mam we wszystkich plikach z tego korzystac? tak?

  1. $gracz['level'] itd?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Skie
post
Post #2





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Uchwyt do storage powinien być zdefiniowany jako Dependency klasy PlayerFactory.

  1. class PlayerFactory
  2. {
  3. protected $storage = null;
  4.  
  5. // ...
  6.  
  7. public function __construct(Storage $storage)
  8. {
  9. $this->storage = $storage;
  10. }
  11.  
  12. public function createPlayer($id)
  13. {
  14. // $this->storage to handler to klasy, która zajmuje się połączeniem z Twoim storage - może to być to PDO dla MySQL albo jakiś ORM albo cokolwiek używasz
  15. $data = $this->storage->getPlayerData($id);
  16.  
  17. return new PlayerModel($data);
  18. }
  19.  
  20. // ...
  21. }


Następnie wywołanie tego kodu w jakimś miejscu wyglądało by tak:

  1. $session = new Session(); // jakiś obiekt, którym zarządzasz sesją
  2. $storage = new Storage(); // jakiś obiekt, którym zarządzasz magazynem danych - innymi słowy to ta klasa powinna być świadoma o obiekcie $db, który trzyma połączenie do bazy danych
  3. $factory = new PlayerFactory($storage); // fabryka graczy
  4.  
  5. $player = $factory->createPlayer($session->getId()); // za pomocą fabryki tworzysz obiekt klasy PlayerModel, który zawiera WSZYSTKIE dane odnośnie gracza. Zauważ, że ID przekazane do createPlayer() pobrałeś od obiektu Session(), który potrafi operować na sesji
  6.  
  7. echo $player->getId(); // zwraca Id gracza
  8. echo $player->getName(); // zwraca name gracza
  9. echo $player->getLevel(); // zwraca poziom gracza
  10. // itd./


Wszystkie gettery które użyłem na $player, oczywiście musisz zdefiniować wewnątrz klasy PlayerModel. Połaczenie z bazą danych powinno być zdefiniowane gdzieś wewnątrz klasy Storage, czyli np.:

  1. class Storage {
  2. protected $db = null;
  3.  
  4. public function __construct()
  5. {
  6. $this->db = new PDO(...);
  7. }
  8.  
  9. public function getPlayerData($id) // zauważ, że własnie tę metodę wykorzystuje metoda PlayerFactory::createPlayer() do pobrania danych
  10. {
  11. $stmt = $this->db->prepare("SELECT * FROM players WHERE id=:id");
  12. $stmt->bindValue(':id', $id, PDO::PARAM_INT);
  13. $stmt->execute();
  14.  
  15. return $stmt->fetch(PDO::FETCH_ASSOC);
  16. }
  17. }


Pamiętaj , że obiekt klasy Storage() powinieneś stworzyć RAZ na całą swoją aplikację i następnie wstrzykiwać tam gdzie jest Ci potrzebny, by nie tworzyć zbędnych połączeń do bazy danych. Oczywiście jest to bardzo prosta implementacja takiego magazynu danych. Wraz ze wzrostem wiedzy, wyabstraktujesz tę klasę do masy innych podklas.

Ten post edytował Skie 8.08.2015, 20:38:48
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 20:32