Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwna konstrukcja warunku if (coś mi nie pasuje)
Forum PHP.pl > Forum > PHP
busterek
Witajcie.
Napisałem sobie skrypt, którzy z katalogu wczytuje maile i wyłuskuje z nich adresy nadawcy. Ponieważ są również maile od allegro i payu, to w tych mailach szuka pola Return-Path.
Wyciągnąłem adres z pola From, i sprawdzam jego wartość taką konstrukcją:

  1. if (strpos($adres, '@allegro.pl') === false or strpos($adres, '@payu.pl') === false)


Czyli przekładając na język ludzki: jeśli w adresie nie występuje ciąg '@allegro.pl' lub '@payu.pl' to ...

Jednakże nie działa to poprawnie. Zadziałało natomiast:

  1. if (strpos($adres, '@allegro.pl') === false and strpos($adres, '@payu.pl') === false)


Przecież to nielogiczne. Czy ja czegoś nie rozumiem? Może ktoś mi wyjaśnie o co chodzi? Dlaczego z punktu widzenia logiki pierwsza konstrukcja warunku if nie działa poprawnie?
freemp3
Oczywiście, że logiczne. W końcu jeśli będziesz miał adres z @allegro.pl to sprawdzanie @payu.pl zwróci false - warunek spełniony. W odwrotnej sytuacji będzie podobnie więc warunek działa dobrze, jednak Twoje założenie jest błędne. Jeśli chcesz użyć "OR" to powinieneś sprawdzać czy strpos zwróci true.

Założenie powinno być takie: jeśli adres jest różny od @allegro.pl oraz od @payu.pl. Nie można użyć lub ponieważ jeśli będzie równy pierwszemu to zawsze będzie różny od drugiego i odwrotnie.
Wazniak96
Matematyka... Jednoznacznie twój zapis można zapisać jako !strpos, a przy negacji zawsze używamy koniunkcji. wink.gif
busterek
No tak. Faktycznie. macie rację. Jakoś zapędziłem się w tych dumaniach. Zgadzm się. Faktycznie jest dobrze. :-)
no_face
Uwierz, ze jest logiczne. Przy negacji uzywamy and'a smile.gif

EDIT

Cytat
W końcu jeśli będziesz miał adres z @allegro.pl to sprawdzanie @payu.pl zwróci false


Praktycznie rzecz ujmujac w tym przypadku @payu.pl nie zwroci false. Przy OR jezeli pierwszy warunek zwroci TRUE caly if jest TRUE i nie sa sprawdzane kolejne warunki smile.gif
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.