[PHP] Poprawność złozonego warunku if

[PHP] Poprawność złozonego warunku if
PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Witam, czy przytoczony przeze mnie poniżej warunek jest dopuszczalny? Działać działa :D

Kopiuj
if( ( $reason == 'wlasny' && !empty($written_reason) ) || $reason != 'wlasny' ) 
cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9019
1

A czemu pytasz? Co Ci w tym zapisie nie pasuje? Zwłaszcza, że mówisz, że działa zgodnie z oczekiwaniami :P

PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Pytam bo nigdzie nie spotkałem się z takimi warunkami z dodatkowym nawiasem w środku.
Są tak jak by dwa główne warunki musi być spełniony jeden lub drugi, tylko że ten pierwszy składa się dwóch.

Jeśli nic złego w tym nie widzisz i działa no to super :D

stivens
  • Rejestracja: dni
  • Ostatnio: dni
1

Ale wiesz, ze wystarczy if (reason != wlasny || !empty(written_reason))? ;)

p /\ q \/ ~p === ~p \/ q

EDIT: jak sie LaTeXa uzywa na coyocie?

serek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1506
3
PavlO. napisał(a):

Pytam bo nigdzie nie spotkałem się z takimi warunkami z dodatkowym nawiasem w środku.

Nawiasy pełnią tylko funkcję oddzielenia jednej części wyrażania logicznego od reszty. Są jak najbardziej dozwolone, a nawet często wskazane xD

Tylko odradzam pisanie długich warunków wewnątrz if (...) {. Zdecydowanie czytelniej jest wrzucić warunek do jakiejś funkcji, którą w ifie się wywoła.

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9019
3

No ale można sobie i 20 operacji połączyć, nie ma w tym niczego złego/żadnego problemu.

W "pierwszym" nawiasie - ( $reason == 'wlasny' && !empty($written_reason) ) masz dwa warunki - jeżeli oba będą prawdziwe, to wartość całego nawiasu będzie TRUE.

Następnie bierzemy pod uwagę wartość w/w nawiasu oraz $reason != 'wlasny'. Mamy je połączone operatorem || - więc jeśli którykolwiek z nich będzie prawdziwy, to całość także zwróci TRUE.

A taka uwaga z zakresu "ładnego pisania" - lepiej to sprawdzenie wydzielić do osobnej funkcji - wtedy byłoby coś w stylu if (goodReason($reason)) i w tej funkcji zawrzeć całą logikę. Wtedy podczas analizy kodu nie musisz rozkminiać co się kryje w tym IF, tylko patrzysz i wiesz, że skrypt pojedzie dalej, jeśli funkcja goodReason zwróci TRUE, czyli że podana przyczyna spełnia postawione jej kryteria.

PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Dziękuję wszystkim za pomocne odpowiedzi :)

CH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 449
2

Możesz zawsze skrócić ten warunek i dać taki:

Kopiuj
if( $reason <=> 'wlasny' || !empty($written_reason))
VO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
2

W razie wątpliwości czy nawiasy sa potrzebne, zawsze można spojrzec tutaj: https://www.php.net/manual/en/language.operators.precedence.php. Btw jeżeli $reason nie jest obiektem który implementuje __toString(), to warto użyć === i !==, niż == i !=.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.