Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konstruktor w klasie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Szymad
Witam, mam kod. Uwaga, nazwy zmiennych kopiowałem z jednej funkcji tworząc kolejne, dlatego nazwy są takie same, a odnoszą się do czego innego.

  1. class Equal{
  2.  
  3. public $CONFIRM_ID = 1;
  4. public $ACCOMPANYING_ID = 0;
  5.  
  6.  
  7.  
  8. public $oldCountCONFIRM = 0;
  9. public $oldCountACCOMPANYING = 0;
  10. public $newCountCONFIRM = 0;
  11. public $newCountACCOMPANYING = 0;
  12.  
  13. public $oldMagazineCONFIRM = 0;
  14. public $oldMagazineACCOMPANYING = 0;
  15. public $newMagazineCONFIRM = 0;
  16. public $newMagazineACCOMPANYING = 0;
  17.  
  18. public $differenceCONRIRM = 0;
  19. public $differenceACCOMPANYING = 0;
  20.  
  21. public function __constructor(){
  22.  
  23.  
  24. $this->getProductsConfirm();
  25. $this->getProductsAccompanying();
  26. $this->getMagazineConfirm();
  27. $this->getMagazineAccompanying();
  28.  
  29. }
  30.  
  31. protected function getProductsConfirm(){
  32.  
  33. /**
  34.   *
  35.   * POBIERA INFORMACJE, KTÓRE PRODUKTY SŁUŻĄ
  36.   * ZA UPOMINKI DLA POTWIERDZONYCH
  37.   **/
  38. $link = getConnect();
  39. $query2 = "SELECT * FROM `ad_config`";
  40. $ac = mysqli_query($link,$query2);
  41. $temp = mysqli_fetch_row($ac);
  42. $for_confirm = $temp[2];
  43.  
  44.  
  45.  
  46.  
  47. return $for_confirm;
  48.  
  49. }
  50.  
  51. protected function getProductsAccompanying(){
  52.  
  53. /**
  54.   *
  55.   * POBIERA INFORMACJE, KTÓRE PRODUKTY SŁUŻĄ
  56.   * ZA UPOMINKI DLA TOWARZYSZĄCYCH
  57.   **/
  58. $link = getConnect();
  59. $query2 = "SELECT * FROM `ad_config` WHERE `ID`=2";
  60. $ac = mysqli_query($link,$query2);
  61. $temp = mysqli_fetch_row($ac);
  62. $for_confirm = $temp[2];
  63.  
  64. return $for_confirm;
  65.  
  66. }
  67.  
  68. protected function getMagazineConfirm(){
  69.  
  70. /**
  71.   *
  72.   * POBIERA INFORMACJE, JAKI JEST STAN MAGAZYNOWY PRODUKTÓW,
  73.   * KTÓRE PRODUKTY SŁUŻĄ
  74.   * ZA UPOMINKI DLA POTWIERDZONYCH
  75.   *
  76.   **/
  77. $CONFIRM_ID = $this->getProductsConfirm();
  78.  
  79. if(($CONFIRM_ID)>0){
  80. $link = getConnect();
  81. $query2 = "SELECT * FROM `products` WHERE `ID`=".$CONFIRM_ID;
  82. $ac = mysqli_query($link,$query2);
  83. $temp = mysqli_fetch_row($ac);
  84. $for_confirm = $temp[2];
  85.  
  86. $this->$oldCountCONFIRM = $for_confirm;
  87.  
  88. return $for_confirm;
  89.  
  90. }else{
  91.  
  92. throw new Exception("[INNER_OBJ] Unknown ID of for Confirm Products");
  93. }
  94.  
  95.  
  96.  
  97. }
  98.  
  99. protected function getMagazineAccompanying(){
  100.  
  101. /**
  102.   *
  103.   * POBIERA INFORMACJE, JAKI JEST STAN MAGAZYNOWY PRODUKTÓW,
  104.   * KTÓRE PRODUKTY SŁUŻĄ
  105.   * ZA UPOMINKI DLA TOWARZYSZĄCYCH
  106.   *
  107.   **/
  108. $CONFIRM_ID = $this->getProductsAccompanying();
  109.  
  110. if(($CONFIRM_ID)>0){
  111. $link = getConnect();
  112. $query2 = "SELECT * FROM `products` WHERE `ID`=".$CONFIRM_ID;
  113. $ac = mysqli_query($link,$query2);
  114. $temp = mysqli_fetch_row($ac);
  115. $for_confirm = $temp[2];
  116. $this->$oldCountACCOMPANYING = $for_confirm;
  117. return $for_confirm;
  118.  
  119. }else{
  120.  
  121. throw new Exception("[INNER_OBJ] Unknown ID of for Confirm Products");
  122. }
  123.  
  124.  
  125.  
  126. }
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. public function equal(){
  134.  
  135.  
  136. echo "\n\tStan w magazynie dla potwierdzonych ".$this->$oldCountCONFIRM;
  137. echo "\n\tStan w magazynie dla potwierdzonych ".$this->$oldCountACCOMPANTING;
  138. }
  139. }


Otrzymuję: Fatal error: Cannot access empty property in /home/szymadjg/public_html/Lukasz/attendance/edit.php on line 146

Co robię źle?
Crozin
Ale skąd mamy wiedzieć, skoro nawet nie widzimy/nie wiemy gdzie jest magiczna linia numer 146? Poza tym wrzucaj SSCCE, a nie 150 linii kodu.
Szymad
W pliku to ta linia
  1. echo "\n\tStan w magazynie dla potwierdzonych ".$this->$oldCountCONFIRM;
cudny
$oldCountCONFIRM pewnie jest null lub 0
CuteOne
$this->$oldCountCONFIRM
powinno być
$this->oldCountCONFIRM
Szymad
Bardzo dziękuję.
thek
Tak tylko jeszcze w kwestii estetyczno-logicznej... W definicji klasy i jej atrybutów nie powinno się im nadawać wartości "na sztywno", czyli: public $CONFIRM_ID = 1; bo to nie miejsce na to. Od tego służy konstruktor. Inna sprawa to sensowność wykonywania niektórych operacji. Zauważ, że getProductsAccompanying() oraz getProductsConfirm() w konstruktorze są kompletnie zbędne. Nic nie robią, nic nie zwracają do użycia, nic nie inicjalizują. Są jednak wykorzystywane wewnątrz pozostałych 2 metod i tam faktycznie to co zwracają jest używane. To co dodatkowo lekko razi także to rzucanie wyjątku w else.
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.