Menu

PHP empty(): puste łańcuchy, tablice i 0

empty($var) zwraca true, gdy zmiennej brakuje albo jest fałszywa: null, false, 0, 0.0, "", "0" lub []. Nigdy nie ostrzega o niezdefiniowanych zmiennych ani kluczach. Dowiedz się, dlaczego "0" liczy się jako puste, jak dokładnie sprawdzić pusty łańcuch lub tablicę, czym różni się empty od isset i jak walidować dane z formularza.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

empty($var) zwraca true, jeśli zmienna nie istnieje albo jej wartość jest fałszywa: null, false, 0, 0.0, "", "0" lub pusta tablica []. Dla każdej innej wartości zwraca false. Podobnie jak isset() nigdy nie ostrzega o niezdefiniowanych zmiennych ani kluczach tablic.

empty($x) to to samo co !isset($x) || !$x. Innymi słowy: brakuje jej albo konwertuje się na false.

Które wartości są puste

Wybierz wartość w tabeli, aby zobaczyć empty() obok isset() i rzutowania (bool). Każdą komórkę obliczyło PHP 8.3.

empty, isset i (bool) dla każdej wartości $x
Point at or tap a cell to read it as PHP.
$xemptyissetbool
null
false
0
0.0
""
"0"
[]
" "
"0.0"
"a"
"null"
[0]
1
-1
Every cell computed by PHP 8.3.19.

Niespodzianki są na obu końcach: "0" jest puste, a " " (spacja), "0.0", "null" i [0] nie są.

"0" jest puste: klasyczny błąd

Ponieważ "0" jest fałszywe, empty() traktuje ilość 0, wynik 0 albo PIN "0" jak „nic nie wpisano”. To daje się we znaki w formularzach, gdzie każda wartość przychodzi jako łańcuch.

Dla danych tekstowych niezawodnym sprawdzeniem „nic nie wpisano” jest trim($value) === "". Zostaw empty() dla wartości, w których 0 naprawdę oznacza nic.

Sprawdzanie, czy łańcuch jest pusty

Aby dokładnie sprawdzić pusty łańcuch, porównaj z "". Aby traktować też białe znaki jako puste, najpierw użyj trim. Od PHP 5.5 empty() przyjmuje wyrażenia, więc empty(trim($s)) też działa (ale ma ten sam problem z "0").

W PHP 8.1 i nowszych trim() nie przyjmuje null bez komunikatu o przestarzałym użyciu, dlatego blok pisze trim($s ?? "").

Sprawdzanie, czy tablica jest pusta

Dla tablic empty($arr), $arr === [] i count($arr) === 0 dają tę samą odpowiedź. Zaletą empty() jest to, że działa na zmiennej lub kluczu, które mogą nie istnieć.

array_filter() bez callbacku usuwa każdą wartość fałszywą, więc to szybki sposób, by zapytać „czy ta tablica zawiera coś prawdziwego”.

Walidacja wymaganego pola formularza

!empty() to częsty sposób wymagania pola, o ile 0 nie jest poprawną odpowiedzią. Uruchom ten blok, zostaw pola puste i kliknij Send, potem je wypełnij i wyślij ponownie: skrypt wykona się jeszcze raz z wypełnionym $_POST.

empty($_POST["terms"]) obejmuje oba przypadki dla checkboxa: w ogóle niewysłany albo wysłany z pustą wartością. Strona o formularzach idzie dalej, z komunikatami błędów dla każdego pola.

empty vs isset

Obie konstrukcje są bezpieczne na niezdefiniowanych zmiennych i kluczach. Odpowiadają na różne pytania:

  • isset($x): czy istnieje i nie jest null? Używaj dla opcjonalnych kluczy, checkboxów i „czy to w ogóle wysłano”.
  • !empty($x): czy istnieje i jest prawdziwe? Używaj dla „ma coś prawdziwego”, gdy 0 i "0" się nie liczą.
  • $x === "" albo $x === []: czy jest dokładnie puste? Używaj, gdy 0 jest poprawną wartością.

Strona o isset opisuje drugą połowę, łącznie z isset() dla kilku zmiennych naraz i różnicą względem array_key_exists().

Najczęściej zadawane pytania

Które wartości empty() uznaje w PHP za puste?

empty($x) daje true, gdy $x nie istnieje albo ma wartość null, false, 0, 0.0, "", "0" lub []. Wszystko inne nie jest puste, także " " (spacja), "0.0", "false" i [0].

Dlaczego "0" jest puste w PHP?

empty() to to samo co !$x bez ostrzeżenia dla niezdefiniowanych zmiennych, a łańcuch "0" konwertuje się na false. Dlatego empty() nie nadaje się do pól, w których 0 jest poprawną odpowiedzią; sprawdź zamiast tego $x === '' albo trim($x) === ''.

Jak sprawdzić, czy tablica jest pusta w PHP?

Działają empty($arr) i $arr === [], a także count($arr) === 0. empty() zwraca też true, gdy zmienna nie jest ustawiona, a count() na niezdefiniowanej zmiennej ostrzegłoby, a potem rzuciło TypeError dla null.

Kiedy używać empty() zamiast isset()?

Używaj isset(), gdy wystarczy wiedzieć, że wartość istnieje (checkbox został wysłany, klucz konfiguracji jest obecny). Używaj !empty(), gdy wartość musi też być niepusta, na przykład w wymaganym polu tekstowym. Uważaj na pola, w których 0 jest poprawne, bo empty('0') daje true.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ