@stereo emptyjest prawdopodobnie najbardziej użyteczną, ale powszechnie niezrozumianą funkcją PHP. Dowiedz się, jak i kiedy go używać.
deceze
2
@stereo emptyto skrót od isset($var) && $var != false. Musisz się emptybardzo dziwnie trzymać, żeby strzelić sobie tym w stopę. ; P
deceze
@stereo 1) Gdzie jest to „niespójne”? Działa tak, jak napisano na puszce. 2) Luźne porównywanie zmiennej falsebez wywoływania błędu „niezdefiniowana zmienna” jest bezużyteczne? No cóż, chyba nigdy tego nie zrobisz… 3) Wybór niewłaściwej funkcji w kontekście bezpieczeństwa nie oznacza, że sama funkcja jest zła, bezużyteczna lub niespójna; oznacza to po prostu, że ktoś wybrał niewłaściwą funkcję do tego zadania.
var $ var; (zadeklarowana zmienna, ale bez wartości w klasie)
Zauważ, że jest to dokładnie ta sama lista, co w przypadku przymusu na wartość logiczną false. emptyjest po prostu !isset($var) || !$var. Spróbuj issetzamiast tego.
Więc muszę sprawdzić w ten sposób: if (isset ($ var) && $ var! = 0) {Zrób coś} ??
mysqllearner
1
@mysql W tym przypadku równie dobrze możesz użyć !empty($var), ale pamiętaj, że to nie to samo, co napisałeś w pytaniu. To, czego użyć, zależy całkowicie od wartości, które chcesz traktować true. Wystarczy porównać różnice między isseti emptyi wybrać odpowiednią kombinację dla odpowiedniej sytuacji.
deceze
7
@mysqllearner: issetzwraca Trueif $var=0. Ale to, co masz na myśli, if(isset($var) && $var != 0)to to samo, coempty
Felix Kling,
@mysqllearner isset wykrywa, czy NIE jest pusty. aby sprawdzić, czy jest pusty, użyj zamiast tego! isset.
1
@Deji Ponieważ PHP ma swoje korzenie jako język WWW, a wartości w żądaniach HTTP są zawsze ciągami znaków, '0'jest traktowane jako równoważne 0. To podstawowa filozofia projektowania PHP. Zgadzam się, że jest to niezwykle dyskusyjny wybór, jednak nie jestem tutaj, aby z wami debatować nad tym wyborem. W logice PHP, emptyjako odpowiednik == falsepowiadomień minus, jest w porządku IMO. To, że niektóre rzeczy powinny wyglądać inaczej w PHP niż są, to inny temat.
deceze
76
Zastanawiałem się, dlaczego nikt nie zasugerował niezwykle poręcznej tabeli porównawczej typów . Odpowiada na wszystkie pytania dotyczące wspólnych funkcji i porównywania operatorów.
Użyj strlen()zamiast tego. Natrafiłem na ten sam problem, używając 1/0 jako możliwych wartości dla niektórych zmiennych. Używam if (strlen($_POST['myValue']) == 0)do sprawdzenia, czy w mojej zmiennej jest znak, czy nie.
po prostu dodaj @strlen, aby pominąć dziennik błędów, na wszelki wypadek ... aby nie tworzyć dużego dziennika
Miguel
Dlaczego miałbyś to umieścić @strlen. Dopóki przekazujesz zmienną, nie powinna ona generować błędu. Jeśli twój strlen jest pusty, zapisze wartość jako 0.
naszkicuj to
2
Jeśli zmienna nie jest ustawiona, wierzę, że wystąpi błąd.
Evren Yurtesen
11
Niedawno zostałem przyłapany na tym również ze spuszczonymi spodniami. Problem, z którym często mamy do czynienia, to nieustawione zmienne - powiedzmy element formularza, który mógł tam być lub nie, ale dla wielu elementów 0(lub ciąg znaków, '0'który trafiłby przez post, ale nadal byłby oceniany jako „falsey” ) jest uzasadnioną wartością, którą można znaleźć na liście rozwijanej.
używając empty()najpierw, a potem strlen()najlepiej, jeśli tego również potrzebujesz, ponieważ:
if(!empty($var)&& strlen($var)){
echo '"$var" is present and has a non-falsey value!';}
Z językowego punktu widzenia puste ma znaczenie bez wartości . Jak powiedzieli inni, będziesz musiał użyć isset(), aby sprawdzić, czy zmienna została zdefiniowana, co właśnie robisz.
W twoim przypadku $varjest 0, więc empty($var)wróci true, jesteś negując wynik przed testowania go, więc inny blok zostanie uruchomiony dając „ Its empty” jako wyjście.
Właściwie jest ustawiony, po prostu sprawdź, czy zmienna jest ustawiona, czy nie.W tym przypadku, jeśli chcesz sprawdzić, czy twoja zmienna jest naprawdę zerowa lub pusta, możesz użyć tego przykładu:
Nie jestem pewien, czy nadal są ludzie, którzy szukają wyjaśnienia i rozwiązania. Powyższe komentarze mówią wszystko o różnicach między PRAWDA / FAŁSZ / 1 / 0.
Chciałbym tylko przynieść moje 2 centy za sposób wyświetlania rzeczywistej wartości.
BOOLEAN
Jeśli pracujesz z typem danych Boolean, szukasz wyniku TRUE vs. FALSE; jeśli zapiszesz go w MySQL, zostanie zapisany jako 1 lub odpowiednio. 0 (jeśli się nie mylę, to jest to samo w pamięci twojego serwera).
Aby wyświetlić wartość w PHP, musisz sprawdzić, czy jest to prawda (1) czy fałsz (0) i wyświetlić cokolwiek chcesz: „TRUE” lub „FALSE” lub ewentualnie „1” lub „0”.
Uwaga, wszystko większe (lub inne) niż 0 będzie również traktowane jako PRAWDA w PHP. Np .: 2, „abc” itp. Zwróci wartość TRUE.
BIT, TINYINT
Jeśli pracujesz z typem danych liczbowych, sposób ich przechowywania jest taki sam.
Aby wyświetlić wartość, musisz powiedzieć PHP, aby traktował ją jako liczbę. Najłatwiejszym sposobem, jaki znalazłem, jest pomnożenie go przez 1.
właściwy przykład. wystarczy utworzyć pole typu int (przykładowy numer telefonu komórkowego) w bazie danych i przesłać pustą wartość dla poniższej bazy danych za pomocą formularza lub po prostu wstawić za pomocą SQL. co zostanie zapisane w bazie danych 0, ponieważ jest typu int i nie może być zapisane jako puste lub puste. w związku z tym jest pusty, ale zostanie zapisany jako 0, więc podczas pobierania danych przez PHP i sprawdzania pustych wartości. jest to bardzo przydatne i logicznie poprawne.
0,00, 0,000, 0,0000 .... 0,0 ... 0 jest również puste, a powyższy przykład może być również użyty do przechowywania różnych typów wartości w bazie danych, takich jak zmiennoprzecinkowe, podwójne, dziesiętne (dziesiętne mają różne warianty, takie jak 0,000 i tak dalej.
Cześć @Veershetty, witamy w Stack Overflow. Dziękuję za odpowiedź, ale nie wydaje się, aby dodawać nic nowego do istniejących, bardziej szczegółowych odpowiedzi. Edytuj odpowiedź, aby dodać szczegóły, których brakuje w innych odpowiedziach, lub rozważ usunięcie odpowiedzi, jeśli nie dodaje ona nic nowego.
empty
jest prawdopodobnie najbardziej użyteczną, ale powszechnie niezrozumianą funkcją PHP. Dowiedz się, jak i kiedy go używać.empty
to skrót odisset($var) && $var != false
. Musisz sięempty
bardzo dziwnie trzymać, żeby strzelić sobie tym w stopę. ; Pfalse
bez wywoływania błędu „niezdefiniowana zmienna” jest bezużyteczne? No cóż, chyba nigdy tego nie zrobisz… 3) Wybór niewłaściwej funkcji w kontekście bezpieczeństwa nie oznacza, że sama funkcja jest zła, bezużyteczna lub niespójna; oznacza to po prostu, że ktoś wybrał niewłaściwą funkcję do tego zadania.empty()
, prawdopodobnie ma niewłaściwą nazwę.Odpowiedzi:
http://php.net/empty
Zauważ, że jest to dokładnie ta sama lista, co w przypadku przymusu na wartość logiczną
false
.empty
jest po prostu!isset($var) || !$var
. Spróbujisset
zamiast tego.źródło
!empty($var)
, ale pamiętaj, że to nie to samo, co napisałeś w pytaniu. To, czego użyć, zależy całkowicie od wartości, które chcesz traktowaćtrue
. Wystarczy porównać różnice międzyisset
iempty
i wybrać odpowiednią kombinację dla odpowiedniej sytuacji.isset
zwracaTrue
if$var=0
. Ale to, co masz na myśli,if(isset($var) && $var != 0)
to to samo, coempty
'0'
jest traktowane jako równoważne0
. To podstawowa filozofia projektowania PHP. Zgadzam się, że jest to niezwykle dyskusyjny wybór, jednak nie jestem tutaj, aby z wami debatować nad tym wyborem. W logice PHP,empty
jako odpowiednik== false
powiadomień minus, jest w porządku IMO. To, że niektóre rzeczy powinny wyglądać inaczej w PHP niż są, to inny temat.Zastanawiałem się, dlaczego nikt nie zasugerował niezwykle poręcznej tabeli porównawczej typów . Odpowiada na wszystkie pytania dotyczące wspólnych funkcji i porównywania operatorów.
Fragment:
Wraz z innymi ściągami zawsze trzymam wydruk tego stołu na biurku, na wypadek, gdyby nie był pewien
źródło
W przypadku wartości liczbowych należy użyć funkcji is_numeric:
źródło
Użyj
strlen()
zamiast tego. Natrafiłem na ten sam problem, używając 1/0 jako możliwych wartości dla niektórych zmiennych. Używamif (strlen($_POST['myValue']) == 0)
do sprawdzenia, czy w mojej zmiennej jest znak, czy nie.źródło
@strlen
. Dopóki przekazujesz zmienną, nie powinna ona generować błędu. Jeśli twój strlen jest pusty, zapisze wartość jako 0.Niedawno zostałem przyłapany na tym również ze spuszczonymi spodniami. Problem, z którym często mamy do czynienia, to nieustawione zmienne - powiedzmy element formularza, który mógł tam być lub nie, ale dla wielu elementów
0
(lub ciąg znaków,'0'
który trafiłby przez post, ale nadal byłby oceniany jako „falsey” ) jest uzasadnioną wartością, którą można znaleźć na liście rozwijanej.używając
empty()
najpierw, a potemstrlen()
najlepiej, jeśli tego również potrzebujesz, ponieważ:źródło
Z językowego punktu widzenia puste ma znaczenie bez wartości . Jak powiedzieli inni, będziesz musiał użyć
isset()
, aby sprawdzić, czy zmienna została zdefiniowana, co właśnie robisz.źródło
0
w porównaniunull
problem z obroną. Dzięki!empty()
zwraca prawdę dla wszystkiego, do czego się zwracaFALSE
, w rzeczywistości jest to „nie” (!
) w przebraniu. Myślę, że miałeś na myśliisset()
źródło
Aby zaakceptować 0 jako wartość w zmiennej, użyj
isset
Sprawdź, czy zmienna jest pusta
Sprawdź, czy zmienna jest ustawiona
źródło
To działa dla mnie!
źródło
Następujące rzeczy są uważane za puste:
Z podręcznika PHP
W twoim przypadku
$var
jest0
, więcempty($var)
wrócitrue
, jesteś negując wynik przed testowania go, więc inny blok zostanie uruchomiony dając „Its empty
” jako wyjście.źródło
Z instrukcji: zwraca FALSE, jeśli zmienna ma niepustą i niezerową wartość.
Następujące rzeczy są uważane za puste:
Więcej: http://php.net/manual/en/function.empty.php
źródło
W moim przypadku ten kod zadziałał.
źródło
Właściwie jest ustawiony, po prostu sprawdź, czy zmienna jest ustawiona, czy nie.W tym przypadku, jeśli chcesz sprawdzić, czy twoja zmienna jest naprawdę zerowa lub pusta, możesz użyć tego przykładu:
tylko dla powiadomienia $ myVar == 0 działa jak pusta funkcja.
źródło
pusty powinien oznaczać pusty… cokolwiek mówi deceze.
Kiedy robię
Spodziewam się, że
var_dump(empty($var));
to zwróci fałsz.jeśli sprawdzasz rzeczy w tablicy, zawsze musisz to zrobić w
isset($var)
pierwszej kolejności.źródło
użyj tylko
($_POST['input_field_name'])!=0
zamiast!($_POST['input_field_name'])==0
wtedy 0 nie jest traktowane jako puste.źródło
Nie jestem pewien, czy nadal są ludzie, którzy szukają wyjaśnienia i rozwiązania. Powyższe komentarze mówią wszystko o różnicach między PRAWDA / FAŁSZ / 1 / 0.
Chciałbym tylko przynieść moje 2 centy za sposób wyświetlania rzeczywistej wartości.
BOOLEAN
Jeśli pracujesz z typem danych Boolean, szukasz wyniku TRUE vs. FALSE; jeśli zapiszesz go w MySQL, zostanie zapisany jako 1 lub odpowiednio. 0 (jeśli się nie mylę, to jest to samo w pamięci twojego serwera).
Aby wyświetlić wartość w PHP, musisz sprawdzić, czy jest to prawda (1) czy fałsz (0) i wyświetlić cokolwiek chcesz: „TRUE” lub „FALSE” lub ewentualnie „1” lub „0”.
Uwaga, wszystko większe (lub inne) niż 0 będzie również traktowane jako PRAWDA w PHP. Np .: 2, „abc” itp. Zwróci wartość TRUE.
BIT, TINYINT
Jeśli pracujesz z typem danych liczbowych, sposób ich przechowywania jest taki sam.
Aby wyświetlić wartość, musisz powiedzieć PHP, aby traktował ją jako liczbę. Najłatwiejszym sposobem, jaki znalazłem, jest pomnożenie go przez 1.
źródło
właściwy przykład. wystarczy utworzyć pole typu int (przykładowy numer telefonu komórkowego) w bazie danych i przesłać pustą wartość dla poniższej bazy danych za pomocą formularza lub po prostu wstawić za pomocą SQL. co zostanie zapisane w bazie danych 0, ponieważ jest typu int i nie może być zapisane jako puste lub puste. w związku z tym jest pusty, ale zostanie zapisany jako 0, więc podczas pobierania danych przez PHP i sprawdzania pustych wartości. jest to bardzo przydatne i logicznie poprawne.
0,00, 0,000, 0,0000 .... 0,0 ... 0 jest również puste, a powyższy przykład może być również użyty do przechowywania różnych typów wartości w bazie danych, takich jak zmiennoprzecinkowe, podwójne, dziesiętne (dziesiętne mają różne warianty, takie jak 0,000 i tak dalej.
źródło
Musisz użyć isset (), aby sprawdzić, czy wartość jest ustawiona.
źródło