Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dlaczego skrypt wpada w pętlę
Forum PHP.pl > Forum > Przedszkole
Jozjasz
Pierwszy skrypt wpada w pętlę, a drugi nie; nie rozumiem dlaczego, jaka jest właściwie między nimi różnica ? Jaka jest różnica między nimi, gdyby ktoś mógłby mi dać wskazówkę...
  1. $a = opendir(witryna);
  2.  
  3. $b = readdir($a);
  4.  
  5.  
  6. while ($c = $b){
  7.  
  8.  
  9. echo $c;
  10. }


i drugi, nie wpada w pętlę:
  1. $a = opendir(witryna);
  2.  
  3. #$b = readdir($a);
  4.  
  5.  
  6. while ( $r = readdir($a)){
  7.  
  8.  
  9. echo $r."<br />";
  10. }
yevaud
w pierwszym przypadku ani zmienna $b, ani $c nie zmieniaja sie w petli, dlatego nie ma powodu zeby z niej wyjsc
wookieb
Bo 1 ciągle coś przypisujesz (a nie sprawdzasz). W dodatku nie modyfikujesz żadnej ze zmiennych w pętli.
Jozjasz
Cytat
w pierwszym przypadku ani zmienna $b, ani $c nie zmieniaja sie w petli, dlatego nie ma powodu zeby z niej wyjsc


Nie rozumiem zatem dlaczego $b ma się nie zmieniać w pętli, a readdir($a) ma się już zmieniać ? Dlaczego $b się nie zmienia w tej pętli, a już readdir($a) się zmienia?

Mi sie wydaje/wydawało, ze skoro $b przypiszę readdir($a), to $b zachowa się tak samo jak readdir($a).

Jak jest zatem różnica między $b, której przypisane jest readdir($a) a samej readdir($a) ?!
everth
Różnica jest najprostsza - w pierwszym przypadku $b przyjmuje wartość zwróconą przez funkcję readdir(). I trzyma ją aż nie zostanie w jakiś sposób zmienione w skrypcie - przypisujesz bowiem zmiennej nie funkcję a wartość przez funkcję zwracaną. W drugim wywołujesz funkcję więc za każdym przebiegiem pętli zwraca ona wartość odpowiednią dla funkcji (tutaj nazwę kolejnego pliku).

W pierwszym skrypcie wartość $b zmienia ci się tylko na początku - w momencie wywołania readdir(). Później jest cały czas ta sama - czyli jest prawdą dla warunku while. W drugim skrypcie zmienia się w każdym przebiegu pętli bo wywołujesz readdir() w warunku (niekoniecznie tam musi być wywołane, można by wywołać je w ciele pętli i przypisać jakiejś wartości która później będzie sprawdzana w warunku) - więc wartość jest za każdym razem inna.

Mam nadzieję że rozumiesz o co chodzi, bo o 4 nad ranem to ciężko ubrać myśli w słowa smile.gif. Jakby co to tutaj masz czym jest zmienna, a czym funkcja.
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.