Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Dodawanie poprzedniej wartości zmiennej - jak wyzerować
Forum PHP.pl > Forum > PHP
GreeN_DG
Witam. Mam pewien problem :

Powiedzmy że mam taką metodę klasy "imgfile" :

  1. public function isExistFile($imgid)
  2. {
  3. $this->filelink .= $imgid.'.jpg';
  4. if(file_exists($this->filelink))
  5. {
  6. return $this->filelink;
  7. }
  8. else
  9. {
  10. return $this->filelink;
  11. }
  12. }


Teraz w innej klasie wywołuję tą metodę :

  1. $upload = new imgfile;
  2.  
  3. while ($row = $wynik->fetch_assoc())
  4. {
  5.  
  6. if($akcja = $upload->isExistFile($row['imgid']))
  7. {
  8. print_r($akcja);
  9. array_push($this->imgtab, $row);
  10. }
  11. else
  12. {
  13. ...
  14. ...
  15. }
  16. }


$row['imgid'] - zawiera kolejne id obrazków np. 1,2,3,4

Po odpaleniu :

Daje mi takie coś :

  1. ../uimages/28.jpg../uimages/28.jpg29.jpg../uimages/28.jpg29.jpg30.jpg../uimages/28.jpg29.jpg30.jpg31.jpg


Zamiast zwrócić :

  1. ../uimages/28.jpg../uimages/29.jpg../uimages/30.jpg


Gdy w pętle 'while' dodam za każdym razem - $upload = new imgfile to problem się rozwiązuje (ale po co na nowo tworzyć obiekt klasy). Dlaczego metoda zwraca sumę kolejnych $row['imgid'] ?
TheTester
Przypuszczam, że chodzi o ten fragment:
  1. $this->filelink .= $imgid.'.jpg';

Czy jak usuniesz kropkę przed znakiem "=", to działa tak jak chcesz?
GreeN_DG
Po pierwsze proszę o przeniesienie --> OOP (pomyliłem dział)

Kropka ma myć :

Pole $filelink posiada wartość :

  1. private $filelink = '../uimages/';


Więc :

  1. $this->filelink .= $imgid.'.jpg';


Gdy np. $imgid = 1;

Ma to dać :

  1. ../uimages/1.jpg


Niestety za drugim wywołaniem metody pole $filelink wygląda tak :

  1. ../uimages/1.jpg2.jpg


Zamiast :

  1. ../uimages/2.jpg
kalmaceta
masz jeden obiekt w którym jest pole filelink , do którego cały czas dodajesz ciągi znaków przez tą kropkę ".=". Najprzejrzyściej jest tworzyć obiekt w pętli while. Ew. możesz dodać metodę czysc() która ustawia filelink na domyślną wartość, ale wtedy jaki jest sens istnienia obiektu.
GreeN_DG
Teraz zrozumiałem ten problem. Jak będzie się miało do wydajności jeśli za każdym razem w pętli while będzie tworzony nowy obiekt (na szczęście nie kolejny bo ten nowy będzie zastępował stary, bowiem zmienna wskazująca będzie taka sama).
franki01
Po co tworzyć nowy obiekt? Jeżeli przy inicjacji obecnego obiektu masz domyślą wartość $this->filelink, do której tylko dopisujesz nazwę pliku, zrób inaczej. W klasie stwórz zmienną $this->fileLinkDefault i mu przypisz domyślną wartość, a potem zamiast:
  1. $this->filelink .= $imgid.'.jpg';

daj:
  1. $this->filelink = $this->filelinkDefault.$imgid.'.jpg';
kalmaceta
@franki01 z takim podejściem jak prezentujesz do OOP - zadaj pytanie po co w ogóle obiekt.
GreeN_DG
Przyznam się szczerze, że zamotałem się a rozwiązanie było takie proste. Doszukiwałem się sam nie wiem czego a jak @franki01 pisał tu chodziło o przypisywanie wartości do zmiennej, no ale fakt faktem w tym wypadku sens istnienia obiektu jest znikomy. Wystarczy w tamtej klasie sprawdzić "file_exists" bez tworzenia obiektu.
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.