Czy istnieje różnica między isseti !empty. Jeśli wykonam tę podwójną kontrolę logiczną, czy jest to poprawne w ten sposób, czy jest zbędne? i czy istnieje krótszy sposób na zrobienie tego samego?
Oczywistymi dokładnymi uzupełnieniami są isset i is_null, ale! Empty obejmuje kilka różnych. Wszystko zależy od typu danych, dla których testujesz.
Jeff Clayton
Odpowiedzi:
419
Jest to całkowicie zbędne. emptyjest mniej więcej skrótem !isset($foo) || !$fooi !emptyjest analogiczny do isset($foo) && $foo. Tzn. emptyRobi to odwrotnie, isseta dodatkowo sprawdza prawdziwość wartości.
Innymi słowy, emptyjest taki sam jak !$foo, ale nie rzuca ostrzeżeń, jeśli zmienna nie istnieje. To jest główny punkt tej funkcji: wykonaj porównanie boolowskie bez obawy o ustawienie zmiennej.
Ale jeśli nie $vars[1]będzie, dostanie powiadomienie.
karim79
6
Nie mam pojęcia, skąd wziął się ten pomysł. Plus jeden.
karim79
8
@karim IMO emptyjest jedną z najbardziej niezrozumianych funkcji w PHP. Mały fragment o „generowaniu żadnego ostrzeżenia” jest bardzo łatwy do przeoczenia. Kilka razy musiałem zeskanować dokumentację, aby ją znaleźć i opublikować tutaj.
deceze
2
empty($vars[1])nie powoduje żadnych ostrzeżeń nawet $vars[1]nie jest ustawiony, ale echo $vars[1]będzie. Sprawdziłem fakt za pomocą echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara,
4
@Shahor Wiele języków uważa 0za false. PHP nie jest jedynym. Nadal nie jestem pewien, na czym polega twoja skarga.
deceze
33
isset() sprawdza, czy zmienna jest ustawiona, a nie zerowa:
Przyjęta odpowiedź w żaden sposób nie sugeruje, że issetjest to odpowiednik !empty.
deceze
8
$a =0;if(isset($a)){//$a is set because it has some value ,eg:0
echo '$a has value';}if(!empty($a)){//$a is empty because it has value 0
echo '$a is not empty';}else{
echo '$a is empty';}
Ale nie obsłużyłeś zmiennej nie ustawionej wielkości liter.
Amil Waduwawara,
3
Puste po prostu sprawdź, czy zmieniona / tablica ma wartość, jeśli sprawdzisz dokument php (pusty) zobaczysz, że te rzeczy są uważane za puste
*""(an empty string)*0(0as an integer)*"0"(0as a string)* NULL
* FALSE
* array()(an empty array)*var $var;(a variable declared, but without a valuein a class)
while isset sprawdza, czy zmienna isset i nie jest pusta, co można również znaleźć w php doc (isset)
Jeśli zmienna nie istnieje, nie jest generowane ostrzeżenie. Oznacza to, że empty () jest w istocie zwięzłym odpowiednikiem! Isset ($ var) || $ var == false.
Nie było to nigdy konieczne w żadnej wersji PHP, ponieważ puste już sprawdza (nie) ustawienie. Mylisz fakt, że pusty obsługuje teraz wyrażenia z pytaniem.
alxgb
To prawda, pięć lat później.
Lennon
2
isset($vars[1]) AND !empty($vars[1])jest równoważne z !empty($vars[1]).
Przygotowałem prosty kod, aby pokazać go empirycznie.
„isset”: sprawdza, czy zmienna istnieje i sprawdza prawdziwą wartość NULL lub false. Można go rozbroić, wywołując „rozbroić”. Jeszcze raz sprawdź instrukcję.
Użycie jednego z nich zależy od używanego typu zmiennej.
Powiedziałbym, że bezpieczniej jest sprawdzić jedno i drugie, ponieważ przede wszystkim sprawdzasz, czy zmienna istnieje, a jeśli tak naprawdę nie jest NULL lub jest pusta.
@szahn „bezpieczniej jest sprawdzić oba”, - jako programista możesz sprawdzić wszystko, co chcesz dla bezpieczeństwa. Ale jeśli kod jest redundantny, możesz być redundantny jako programista.
madlopt
0
jeśli używamy tej samej strony do dodawania / edycji za pomocą przycisku przesyłania, jak poniżej
poprzedni post został przesłany bcoz i przez pomyłkę naciśnij Enter, oto moja kompletna odpowiedź ... po co głosować? :(
diEcho
0
Ze strony PHP, odnosząc się do empty()funkcji:
Zwraca, FALSEjeśli varma niepustą i niezerową wartość.
Dobrze wiedzieć. Innymi słowy, wszystko od NULL, 0do „” powróci TRUEpodczas korzystania z empty()funkcji.
Oto opis tego, co isset()zwraca funkcja:
Zwraca, TRUEjeśli varistnieje; FALSEInaczej.
Innymi słowy, tylko zmienne, które nie istnieją (lub zmiennych, o ściśle NULLwartości) powróci FALSEna isset()funkcji. Zwrócone zostaną wszystkie zmienne, które mają dowolny typ wartości, niezależnie od tego, czy jest 0to pusty ciąg tekstowy itp TRUE.
Odpowiedzi:
Jest to całkowicie zbędne.
empty
jest mniej więcej skrótem!isset($foo) || !$foo
i!empty
jest analogiczny doisset($foo) && $foo
. Tzn.empty
Robi to odwrotnie,isset
a dodatkowo sprawdza prawdziwość wartości.Innymi słowy,
empty
jest taki sam jak!$foo
, ale nie rzuca ostrzeżeń, jeśli zmienna nie istnieje. To jest główny punkt tej funkcji: wykonaj porównanie boolowskie bez obawy o ustawienie zmiennej.Instrukcja przedstawia to następująco:
Możesz po prostu użyć
!empty($vars[1])
tutaj.źródło
$vars[1]
będzie, dostanie powiadomienie.empty
jest jedną z najbardziej niezrozumianych funkcji w PHP. Mały fragment o „generowaniu żadnego ostrzeżenia” jest bardzo łatwy do przeoczenia. Kilka razy musiałem zeskanować dokumentację, aby ją znaleźć i opublikować tutaj.empty($vars[1])
nie powoduje żadnych ostrzeżeń nawet$vars[1]
nie jest ustawiony, aleecho $vars[1]
będzie. Sprawdziłem fakt za pomocąecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.0
zafalse
. PHP nie jest jedynym. Nadal nie jestem pewien, na czym polega twoja skarga.isset()
sprawdza, czy zmienna jest ustawiona, a nie zerowa:http://us.php.net/manual/en/function.isset.php
empty()
może zwrócić true, gdy zmienna jest ustawiona na pewne wartości:http://us.php.net/manual/en/function.empty.php
Aby to zademonstrować, wypróbuj następujący kod z nieprzypisanym $ the_var, ustaw na 0 i ustaw na 1.
źródło
Przyjęta odpowiedź jest nieprawidłowa.
isset () NIE jest równoważne z! empty ().
Jeśli pójdziesz tą drogą, stworzysz raczej nieprzyjemne i trudne do debugowania błędy. np. spróbuj uruchomić ten kod:
https://3v4l.org/J4nBb
źródło
isset
jest to odpowiednik!empty
.źródło
Puste po prostu sprawdź, czy zmieniona / tablica ma wartość, jeśli sprawdzisz dokument php (pusty) zobaczysz, że te rzeczy są uważane za puste
while isset sprawdza, czy zmienna isset i nie jest pusta, co można również znaleźć w php doc (isset)
źródło
To nie jest konieczne.
php.net
źródło
isset($vars[1]) AND !empty($vars[1])
jest równoważne z!empty($vars[1])
.Przygotowałem prosty kod, aby pokazać go empirycznie.
Ostatni wiersz jest niezdefiniowaną zmienną.
I kod
Niezdefiniowana zmienna musi być oceniana poza funkcją, ponieważ sama funkcja tworzy zmienną tymczasową w samym zakresie.
źródło
„Pusty”: działa tylko na zmiennych. Pusty może oznaczać różne rzeczy dla różnych typów zmiennych (sprawdź instrukcję: http://php.net/manual/en/function.empty.php ).
„isset”: sprawdza, czy zmienna istnieje i sprawdza prawdziwą wartość NULL lub false. Można go rozbroić, wywołując „rozbroić”. Jeszcze raz sprawdź instrukcję.
Użycie jednego z nich zależy od używanego typu zmiennej.
Powiedziałbym, że bezpieczniej jest sprawdzić jedno i drugie, ponieważ przede wszystkim sprawdzasz, czy zmienna istnieje, a jeśli tak naprawdę nie jest NULL lub jest pusta.
źródło
jeśli używamy tej samej strony do dodawania / edycji za pomocą przycisku przesyłania, jak poniżej
wtedy nie powinniśmy używać
bcoz
edit_id
jest cały czas ustawiany bez względu na to, czy jest to strona dodawana, czy edytowana, zamiast tego należy użyć warunku poniżejźródło
empty()
funkcji:Zwraca,
FALSE
jeślivar
ma niepustą i niezerową wartość.Dobrze wiedzieć. Innymi słowy, wszystko od
NULL
,0
do „” powróciTRUE
podczas korzystania zempty()
funkcji.isset()
zwraca funkcja:Zwraca,
TRUE
jeślivar
istnieje;FALSE
Inaczej.Innymi słowy, tylko zmienne, które nie istnieją (lub zmiennych, o ściśle
NULL
wartości) powróciFALSE
naisset()
funkcji. Zwrócone zostaną wszystkie zmienne, które mają dowolny typ wartości, niezależnie od tego, czy jest0
to pusty ciąg tekstowy itpTRUE
.źródło