Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasy i obiekty - jak sie dostac do klasy utworzonej w konstrukcie?
Forum PHP.pl > Forum > Przedszkole
dolar
Mam problem z dostaniem sie do klas w konstruktorze. To znaczy, ze zalozylam sobie ze miasto Warszwa ma zawsze 7 stacji paliw. W drugim kodzie php jak widac na zwenatrz zrobilam sobie 2 obiekty, ale nie moge tam sie dostac do moich stacji, ktore utworzylam w konstrukcie bo ich nie widzi program.... jak ja mam sie tam dostac i dodac teraz sobie jakis rodzaj paliwa do danej stacji? Wszystko mam robic po stronie tam gdzie klasy i obiekty czy jak? Za bardzo nie wiem jak to ugryzc... .


  1.  
  2. class Warszawa
  3. {
  4.  
  5. private $stacje = array();
  6.  
  7. function __construct()
  8. {
  9. $bp = new Stacja('Bp', 8, 'Tak');
  10. $this->stacje[] = $bp;
  11.  
  12. $lotos = new Stacja('Lotos', 4, 'Tak');
  13. $this->stacje[] = $lotos;
  14.  
  15. $statoil = new Stacja('Statoil', 4, 'Nie');
  16. $this->stacje[] = $statoil;
  17.  
  18. $orlen = new Stacja('Orlen', 6, 'Tak');
  19. $this->stacje[] = $orlen;
  20.  
  21. $shell = new Stacja('Shell', 6, 'Tak');
  22. $this->stacje[] = $shell;
  23.  
  24. $moya = new Stacja('Moya', 6, 'Nie');
  25. $this->stacje[] = $moya;
  26.  
  27. $lukoil = new Stacja('Lukoil', 8, 'Tak');
  28. $this->stacje[] = $lukoil;
  29.  
  30. }
  31.  
  32.  
  33. }
  34.  
  35. class Stacja
  36. {
  37.  
  38. private $marka;
  39. private $iloscDystrybutorow;
  40. private $rodzajePaliw = array();
  41. private $czyPosiadaMycie;
  42.  
  43. function __construct(string $marka, int $ileDystrybutorow, string $czyPosiadaMycie)
  44. {
  45. $this->marka = $marka;
  46. $this->iloscDystrybutorow = $ileDystrybutorow;
  47. $this->czyPosiadaMycie = $czyPosiadaMycie;
  48. }
  49.  
  50.  
  51. function dodajPaliwo(Paliwo $paliwo)
  52. {
  53. $this->rodzajePaliw[] = $paliwo;
  54. }
  55.  
  56. }
  57.  
  58. class Paliwo
  59. {
  60.  
  61. private $rodzajPaliwa;
  62. private $cena;
  63.  
  64. function __construct(string $rodzjaPaliwa, int $cena)
  65. {
  66. $this->rodzajPaliwa = $rodzjaPaliwa;
  67. $this->cena = $cena;
  68. }
  69.  
  70. }
  71.  


  1. $warszawa = new Warszawa();
  2. $pb95orlen = new Paliwo('pb95', 4,99);
  3.  
lukaskolista
Pierwszy błąd: nazwałaś klasę "Warszawa". Aby uświadomić Ci jak poważny błąd popełniłaś stwórz na próbę klasy dla wszystkich miast w Polsce.
Drugi błąd: klasa jest uzależniona od kontekstu. Nawet jak zmienisz nazwę klasy z "Warszawa" na coś innego, to i tak każdy obiekt ten klasy zna tylko jeden kontekst tego samego miasta.

Poprawny kod (przykład użycia):
  1. <?php
  2.  
  3. $rodzajePaliw1 = [
  4. new RodzajPaliwa('pb95', 4,99),
  5. new RodzajPaliwa('diesel', 4,88)
  6. ];
  7.  
  8. $rodzajePaliw2 = [
  9. new RodzajPaliwa('pb95', 4.95),
  10. new RodzajPaliwa('diesel', 4,79)
  11. ];
  12.  
  13. $stacjePaliw = [
  14. new StacjaPalic('Marka1', 5, true, $rodzajePaliw1),
  15. new StacjaPalic('Marka2', 2, false, $rodzajePaliw2)
  16. ];
  17.  
  18. $miasto = new Miasto($stacjePaliw);

Osobiście nie widzę potrzeby tworzenia tylu zmiennych w tym przypadku, jednak chciałem lepiej oddać jego sens.
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.