Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wywołanie konstruktora
Forum PHP.pl > Forum > Przedszkole
jagoda86
Witam

Mam następujący problem, mam dwie klasy: punkt i wezel, klasa wezel zawiera obiekt klasy punkt:
  1. <?php
  2. class punkt
  3.  {
  4.  public $x,$y;
  5.  
  6.  function __construct($x,$y)
  7.  {
  8.  $this->x = $x;
  9.  $this->y = $y;
  10.  }
  11.  
  12.  function __destruct()
  13.  {}
  14.  
  15.  }
  16.  
  17.  
  18. class wezel
  19. {
  20. public $punkt;
  21. public $nr_w;
  22. public $k_w;
  23. public $m_w;
  24.  
  25. public function __construct($nr_w,$k_w,$m_w)
  26.  {
  27. $this->punkt = new punkt();
  28. $this->nr_w = $nr_w;
  29. $this->k_w = $k_w;
  30. $this->m_w = $m_w;
  31.  }
  32.  function __destruct()
  33.  {}
  34. }
  35. ?>


problem polega na tym że gdy chce utworzyć obiekt klasy wezel:
  1. <?php
  2. $w1 = new wezel();
  3. ?>

To wtedy wywala błąd, domyślam się że chodzi o to żeby podczas tworzenia obiektu $w1 zainicjalizować zmienną $punkt (ponieważ w klasie punkt jest konstruktor) i tu właśnie mam problem nie wiem jak to można zrobić, czy da się np. podczas tworzenia obiektu $w1 uruchomić konstruktor z klasy punkt? Bardzo proszę o pomoc. Aha i czy Waszym zdaniem nie prościej by było zrobić to przez dziedziczenie(klasa wezel dziedziczy z klasy punkt)?

ps. Oczywiście mam PHP5.
Statozor
Patrz z jakimi argumentami musisz wywołać konstruktor...
starach
Zaraz trochę nie jarzę.
Przecież $w1 = new wezel(); ma 100 % prawa wywalać ci błąd bo:
1. nie przekazujesz zmiennych do konstruktora klasy węzeł
2. nie przekazujesz zmiennych do konstruktora klasy punkt
Jaki jest komunikat tego błędu ?
koodlaty
Można tak:

  1. <?php
  2. class punkt
  3. {
  4. public $x,$y;
  5.  
  6. public function __construct($x,$y)
  7. {
  8. $this->x = $x;
  9. $this->y = $y;
  10. }
  11. }
  12.  
  13.  
  14. class wezel
  15. {
  16. public $punkt;
  17. public $nr_w;
  18. public $k_w;
  19. public $m_w;
  20.  
  21. public function __construct($nr_w,$k_w,$m_w)
  22. {
  23. $this->nr_w = $nr_w;
  24. $this->k_w = $k_w;
  25. $this->m_w = $m_w;
  26. }
  27.  
  28. public function initPoint($x,$y)
  29. {
  30. $this->punkt = new punkt($x,$y);
  31. }
  32. }
  33.  
  34. $w1 = new wezel($nr_w,$k_w,$m_w);
  35. $w1 -> initPoint($x,$y);
  36. ?>

Albo tak:

  1. <?php
  2. class punkt
  3. {
  4. public $x,$y;
  5.  
  6. public function __construct($x,$y)
  7. {
  8. $this->x = $x;
  9. $this->y = $y;
  10. }
  11. }
  12.  
  13.  
  14. class wezel
  15. {
  16. public $punkt;
  17. public $nr_w;
  18. public $k_w;
  19. public $m_w;
  20.  
  21. public function __construct($nr_w,$k_w,$m_w, $x,$y)
  22. {
  23. $this->nr_w = $nr_w;
  24. $this->k_w = $k_w;
  25. $this->m_w = $m_w;
  26.  
  27. $this->punkt = new punkt($x,$y);
  28. }
  29. }
  30.  
  31. $w1 = new wezel($nr_w,$k_w,$m_w, $x,$y);
  32. ?>
jagoda86
Bardzo dziękuje za pomoc, już wszystko działa.
Mam jeszcze pytanie, czy w PHP5 klasa może zawierać (tak jak to było możliwe w C++) oprócz konstruktora typu:
  1. <?php
  2. class punkt
  3. {
  4. public $x,$y;  
  5. public function __construct($x,$y)
  6. {
  7. $this->x = $x;
  8. $this->y = $y;
  9. }
  10. }
  11. ?>

coś takiego(w C++ był to konstruktor domniemany):
  1. <?php
  2. class punkt
  3. {
  4. public $x,$y;
  5. public function __construct($x,$y)
  6. {
  7. $this->x = $x;
  8. $this->y = $y;
  9. }
  10. public function __construct()
  11. {
  12. $this->x = 0;
  13. $this->y = 0;
  14. }
  15. }
  16. ?>

Bo u mnie wyrzuca błąd: Fatal error: Cannot redeclare punkt::__construct()" title="Zobacz w manualu PHP" target="_manual
Łukasz O.
  1. <?php
  2. class punkt
  3. {
  4. public $x,$y;
  5. public function __construct($x=0,$y=0)
  6. {
  7. $this->x = $x;
  8. $this->y = $y;
  9. }
  10. }
  11. ?>
jagoda86
Dziękuje bardzo.
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.