Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasy w php.
Forum PHP.pl > Forum > Przedszkole
IdeaProgram
Witam, posiadam dwie klasy, DB i Player, w player w konstrukcie zrobilem laczenie z DB. W funkcji getPlayer w Player mam dane o uzytkowniku np. $this->id = $array['id']; teraz gdy zrobilem nowa funkcje pod funkcja getPlayer w tej samej klasie gdy odwoluje sie do id czyli $this->id nie pobiera mi juz tego id. Czy musze robic jakas specjalna publiczna funkcje lub cos innego abym mogl z tego korzystac?
gorden
Tak.
  1. class player {
  2.  
  3. //O TU:
  4. public $player;
  5.  
  6. //////////costamcostam
  7.  
  8. function setPlayer() {
  9. //costam
  10. $this->player = $array['id'];
  11. }
  12.  
  13.  
  14. function getPlayer() {
  15. return $this->player;
  16. }
IdeaProgram
Nie mam pojęcia czemu, ale nadal nie działa. Nie dostarcza id do zapytania.

  1. class DB
  2. {
  3. public $mysqli = null;
  4. public function __construct() {
  5. /* polaczeni */
  6. }
  7. }
  8. class Player
  9. {
  10. public $player;
  11.  
  12. public function __construct()
  13. {
  14. mb_internal_encoding( 'UTF-8' );
  15. mb_regex_encoding( 'UTF-8' );
  16. mysqli_report( MYSQLI_REPORT_STRICT );
  17.  
  18. $this->db = new DB();
  19. }
  20.  
  21. public function getPlayer($array)
  22. {
  23. $object = array();
  24.  
  25. $this->id = $array['id'];
  26.  
  27. $user = $this->db->query('SELECT * FROM `user` WHERE `id` = '.$this->player->id);
  28. }
  29. }


Z góry dziękuję.
viking
Nie wygląda żebyś ustawiał $this->player->id, jest tylko $this->id. Rób sobie zawsze var_dump($zmienna) jeżeli nie masz pewności co się dzieje. Możesz też wymusić typ tablicowy getPlayer(array $array) chociaż w getterze raczej się nie ustawia danych.
IdeaProgram
Uzupełniłem ręcznie zapytanie i mam problem z bazą.

  1. class DB {
  2.  
  3. public $db = null;
  4.  
  5. public function __construct() {
  6.  
  7. include_once "system/config.php";
  8.  
  9. $this->db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DBNAME);
  10.  
  11. if ($this->db->connect_errno) {
  12.  
  13. echo "Error MySQLi: (". $this->db->connect_errno . ") " . $this->db->connect_error;
  14.  
  15. exit();
  16. }
  17. }
  18.  
  19. public function connect()
  20. {
  21. $this->db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DBNAME);
  22. return $this->db;
  23. }
  24.  
  25. public function query($query)
  26. {
  27.  
  28.  
  29. //
  30. }
  31. }
  32.  
  33. class Player
  34. {
  35. public $player;
  36.  
  37. public function __construct()
  38. {
  39. mb_internal_encoding( 'UTF-8' );
  40. mb_regex_encoding( 'UTF-8' );
  41. mysqli_report( MYSQLI_REPORT_STRICT );
  42.  
  43. $this->db = new DB();
  44. }
  45.  
  46. public function getPlayer($array)
  47. {
  48. $object = array();
  49.  
  50. $this->id = $array['id'];
  51.  
  52. $user = $this->db->query('SELECT * FROM `user` WHERE `id` = 1');
  53.  
  54. foreach($user as $key => $value)
  55. {
  56. array_push($object, $value);
  57. }
  58.  
  59. debug($object);
  60.  
  61. }
  62.  
  63. public function getGuild()
  64. {
  65. /* */
  66. }
  67.  
  68. }


Bład:

  1. Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\_class.php on line 59
  2. (
  3. )


Coś skopałem chyba z bazą.
viking
A co zwraca query()?
IdeaProgram
Właśnie tutaj sam nie wiem, w mysqli jest juz funkcja query, lecz chyba ja musze zdefiniować ja w obiektówce? Gdybym robił struturalnie to przeciez funkcji query nie musiał bym definiować, sam nie wiem. Gdy z klasy DB usunę funkcję query to wywala że nie może odnaleźć funkcji query(), lecz przeciez ona jest w mysqli.
viking
Pod $this->db->db->query jest natywna metoda http://php.net/manual/pl/mysqli.query.php ale ty ją definiujesz w klasie DB. connect() większego sensu nie ma bo robisz to samo w konstruktorze.
var_dump($user);
IdeaProgram
Dobra już zrozumiałem, końcowo funkcja query wygląda tak:

  1. public function query($q)
  2. {
  3.  
  4. if($this->query = $this->db->query($q)) {
  5.  
  6. $results = $this->query;
  7.  
  8. return $results;
  9.  
  10. }
  11.  
  12. }

viking
A po co to robisz? To wszystko z konstruktora powinieneś do jakiegoś configa wyrzucić a z takim zastosowaniem jak pokazałeś, klasa DB nie ma sensu.
IdeaProgram
Dobra, dzieki.

Ostatni już problem, założmy mam 2 klasy Player i Guild, chce do konstruktora klasy Guild podać id gracza, czemu nie moge uzyć $this->player->id ?
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.