[PHP] Poprawność złozonego warunku if

0

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

if( ( $reason == 'wlasny' && !empty($written_reason) ) || $reason != 'wlasny' ) 
1

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

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

1

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

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

EDIT: jak sie LaTeXa uzywa na coyocie?

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.

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.

0

Dziękuję wszystkim za pomocne odpowiedzi :)

2

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

if( $reason <=> 'wlasny' || !empty($written_reason))
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 !=.

1 użytkowników online, w tym zalogowanych: 0, gości: 1