Demonical Monk napisał(a)
@cyriel
No chyba nie robisz tego w jednej linii...
Jak już to takiej konstrukcji wymagają skrypty/programy w których NIE DA się sprawdzić warunków w 1 linii i w dowolnym czasie.
while(true) {
$cos = funkcja1();
if (!$cos) break;
$cos2 = funkcja2();
if(!$cos2) break;
if($cos/$cos2 > 10) break;
}
W takiej sytuacji nie sprawdzisz wszystkiego w jednej linii, a przynajmniej w PHP:
if ($cos/$cos2 > 10 || !$cos || !$cos2) //Może wywalić błąd
Jeśli czegoś nie ma - to przyjmuje się że to coś wynosi 0, czyli jeśli funkcja2() zwróci FALSE/0/''/WTF to będzie to równoznaczne z 0 na czas dzielenia i wywali nam ładne division by zero.
wystarczy zamienić
if ($cos/$cos2 > 10 || !$cos || !$cos2)
na
if (!$cos || !$cos2 || $cos/$cos2 > 10)
Kompilator w przypadku "or" skończy sprawdzanie pętli już po pierwszym prawdziwym warunku, reszty nie sprawdzi. czyli jak cos2==0 to już na tym etapie wyjdzie i nie przejdzie do dzielenia.
Co nie zmienia faktu że też jestem za stosowaniem nieskończonych pętli kiedy to jest naprawdę lepsze(czytleniejsze) rozwiązanie.