Czytałem gdzieś, że isset()
funkcja traktuje pusty ciąg jako TRUE
, dlatego isset()
nie jest skutecznym sposobem walidacji danych wejściowych i pól tekstowych z formularza HTML.
Możesz więc użyć empty()
do sprawdzenia, czy użytkownik coś wpisał.
Czy to prawda, że
isset()
funkcja traktuje pusty ciąg jakoTRUE
?W jakich sytuacjach powinienem używać
isset()
? Czy powinienem zawsze!empty()
sprawdzać, czy coś jest?
Na przykład zamiast
if(isset($_GET['gender']))...
Korzystanie z tego
if(!empty($_GET['gender']))...
Odpowiedzi:
isset vs.! empty
FTA:
źródło
empty()
zwraca również wartość true dla pustej tablicy.empty()
zwraca PRAWDA dla 0, nie jest dobrym pomysłem używanie tego operatora do obliczeń matematycznych w przypadku, gdy „0” jest przypadkowo łańcuchem. To może być niebezpieczne. Zamiast korzystać z podstawowych>
,<
a==
operatorzy i zmienne Konwersja za pomocąintval()
lubfloatval()
.W najbardziej ogólny sposób:
isset
sprawdza, czy zmienna (lub element tablicy lub właściwość obiektu) istnieje (i nie jest null)empty
sprawdza, czy zmienna (...) zawiera niepuste dane.Aby odpowiedzieć na pytanie 1 :
daje
Ponieważ zmienna
$str
istnieje.I pytanie 2 :
Do określenia, czy zmienna istnieje , należy użyć isset ; na przykład, jeśli otrzymujesz jakieś dane jako tablicę, może być konieczne sprawdzenie, czy klucz jest ustawiony w tej tablicy.
Pomyśl na przykład o
$_GET
/$_POST
.Teraz, aby popracować nad jego wartością, kiedy wiesz, że istnieje taka wartość: to jest zadanie
empty
.źródło
Żaden z nich nie jest dobrym sposobem sprawdzenia poprawności danych wejściowych.
isset()
nie jest wystarczające, ponieważ - jak już wspomniano - uważa pusty ciąg za prawidłową wartość.! empty()
nie jest również wystarczające, ponieważ odrzuca „0”, które może być prawidłową wartością.Używanie w
isset()
połączeniu z kontrolą równości względem pustego ciągu to absolutne minimum, które musisz zweryfikować, czy parametr przychodzący ma wartość bez tworzenia fałszywych negatywów:Ale przez „absolutne minimum” mam na myśli dokładnie to. Cały powyższy kod określa, czy istnieje jakaś wartość
$_GET['gender']
. To ma nie ustalić, czy wartość$_GET['gender']
jest ważna (na przykład jeden ).("Male", "Female",
"FileNotFound"
)
Zobacz odpowiedź Josha Davisa .
źródło
isset
ma być używany tylko dla zmiennych, a nie tylko wartości, więcisset("foobar")
spowoduje zgłoszenie błędu. Od PHP 5.5empty
obsługuje zarówno zmienne, jak i wyrażenia.Więc twoje pierwsze pytanie powinno brzmieć, jeśli
isset
zwraca prawdę dla zmiennej, która przechowuje pusty łańcuch. A odpowiedź brzmi:Te tabele porównania typu w podręczniku PHP jest bardzo przydatny do takich pytań.
isset
zasadniczo sprawdza, czy zmienna ma wartość inną niż null, ponieważ nieistniejące zmienne mają zawsze wartość null .empty
jest rodzajem części licznika,isset
ale traktuje również wartość całkowitą0
i wartość ciągu"0"
jako puste. (Ponownie spójrz na tabele porównawcze typów ).źródło
empty()
także "obsługuje wyrażenia, a nie tylko zmienne" od PHP 5.5.0.Jeśli masz $ _POST ['param'] i założysz, że jest to typ ciągu
jest identyczny z
źródło
Możesz to przepisać jako „isset () nie jest sposobem na sprawdzenie poprawności danych wejściowych”. Aby sprawdzić poprawność danych wejściowych, użyj rozszerzenia filtru PHP .
filter_has_var()
powie ci, czy zmienna istnieje, podczas gdyfilter_input()
faktycznie będzie filtrować i / lub oczyszczać dane wejściowe.Zauważ, że nie musisz używać
filter_has_var()
przed,filter_input()
a jeśli poprosisz o zmienną, która nie jest ustawiona,filter_input()
po prostu zwrócinull
.źródło
Kiedy i jak używać:
Prawda dla 0, 1, pusty łańcuch, ciąg zawierający wartość, prawda, fałsz
Fałsz dla null
na przykład
Fałsz dla 1, ciąg znaków zawierający wartość, prawda
Prawda dla null, pusty łańcuch, 0, fałsz, np
źródło
isset służy do określenia, czy istnieje instancja czegoś, to znaczy, czy została utworzona instancja zmiennej ... nie dotyczy ona wartości parametru ...
Pascal MARTIN ... +1 ...
Empty () nie generuje ostrzeżenia, jeśli zmienna nie istnieje ... dlatego isset () jest preferowana podczas testowania istnienia zmiennej, gdy zamierzasz ją zmodyfikować ...
źródło
Korzystanie
empty
wystarczy:Dodatkowo, jeśli chcesz uzyskać wartość całkowitą, warto to sprawdzić
intval($variable) !== FALSE
.źródło
empty
...isset
/filter_has_var
musi być użyte do sprawdzenia, czy istnieje zmienna.źródło
Przyszedłem tutaj, szukając szybkiego sposobu na sprawdzenie, czy zmienna ma jakąś treść. Żadna z odpowiedzi tutaj nie zapewniła pełnego rozwiązania, więc oto jest:
Wystarczy sprawdzić, czy na wejściu jest
''
lubnull
, ponieważ:Wynik żądania adresu URL
.../test.php?var=
w$_GET['var'] = ''
Wynik żądania adresu URL
.../test.php
w$_GET['var'] = null
isset()
zwracafalse
tylko wtedy, gdy zmienna istnieje i nie jest ustawiona nanull
, więc jeśli jej użyjesz, otrzymasztrue
puste ciągi (''
).empty()
uwzględnia obanull
i''
puste, ale uwzględnia również'0'
puste, co jest problemem w niektórych przypadkach użycia.Jeśli chcesz traktować
'0'
jako pusty, użyjempty()
. W przeciwnym razie skorzystaj z następującego sprawdzenia:$var .'' !== ''
oceniafalse
tylko dla następujących danych wejściowych:''
null
false
Używam następującego sprawdzenia, aby odfiltrować ciągi zawierające tylko spacje i znaki końca wiersza:
źródło
Używam poniższego, aby uniknąć powiadomień, to sprawdza, czy var jest zadeklarowany w GET lub POST i z prefiksem @ możesz bezpiecznie sprawdzić, czy nie jest pusty i uniknąć powiadomienia, jeśli var nie jest ustawiony:
źródło
@
Nie należy zachęcać do używania operatora „stfu” ( ) i nie jest on konieczny w przypadku fragmentu kodu. To nie jest dobra odpowiedź. Robisz luźne porównanie. Równie dobrze możesz użyć!empty()
.@
spowoduje problemy z debugowaniem, wpływ strony jest wolniejszy i nadal możesz miećerror_log
ponad 1 GB w jednej chwili. Po prostu bądź mądry i używaj!empty()
,!is_null()
czy coś w tym stylu.isset () służy do sprawdzenia, czy zmienna ma ustawioną wartość, czy nie, a Empty () służy do sprawdzenia, czy dana zmienna jest pusta, czy nie.
isset () zwraca wartość true, gdy zmienna nie ma wartości null, podczas gdy Empty () zwraca wartość true, jeśli zmienna jest pustym ciągiem.
źródło
Źródło: Php.net
źródło
isset () sprawdza, czy zmienna jest ustawiona, a nie null:
http://us.php.net/manual/en/function.isset.php
empty () może zwrócić wartość true, gdy zmienna ma określone wartości:
http://us.php.net/manual/en/function.empty.php
źródło
isset () vs empty () vs is_null ()
źródło
! pusty wystarczy. jeśli chcesz tylko sprawdzić, czy dane istnieją, czy nie, użyj isset, inne puste może obsłużyć inne walidacje
?>
źródło