isset($var) zwraca true, jeśli zmienna istnieje, a jej wartość nie jest null. Zwraca false dla niezdefiniowanej zmiennej, zmiennej usuniętej przez unset albo przechowującej null i nigdy nie wypisuje ostrzeżenia.
isset() sprawdza tylko, czy coś jest. Wartość ustawiona, ale pusta, jak 0, "" albo [], nadal daje true. Jeśli chcesz „ustawione i niepuste”, użyj empty (z negacją).
Sprawdzanie klucza tablicy przez isset
Tu isset() używa się najczęściej. Odczyt nieistniejącego klucza wypisuje w zwykłej konfiguracji PHP Warning: Undefined array key; wcześniejsze sprawdzenie przez isset() nie. Działa też dla zagnieżdżonych kluczy i po cichu zatrzymuje się na pierwszym brakującym poziomie.
Gdy potrzebujesz tylko wartości albo wartości domyślnej, $user["website"] ?? "none" wykonuje to samo sprawdzenie w jednym kroku. Zobacz operator null coalescing.
isset z wieloma zmiennymi
Przekaż kilka argumentów, a isset() zwróci true tylko wtedy, gdy wszystkie są ustawione i nie są null. To krótki sposób sprawdzenia, czy dotarło każde wymagane pole.
isset na łańcuchach i obiektach
Na łańcuchu isset($str[5]) sprawdza, czy pod przesunięciem 5 jest znak, co jest szybkim sprawdzeniem długości. Na obiekcie sprawdza właściwość; w klasie z prywatnymi danymi isset() wywołuje metodę __isset(), jeśli klasa ją definiuje.
isset vs empty vs is_null
Wybierz w tabeli wartość $x, aby porównać trzy sprawdzenia i zwykłe rzutowanie (bool). Każdą komórkę obliczyło PHP 8.3.
| $x | isset | empty | is_null | bool |
|---|---|---|---|---|
| null | ||||
| false | ||||
| 0 | ||||
| "0" | ||||
| "" | ||||
| " " | ||||
| [] | ||||
| "a" | ||||
| 1 | ||||
| 0.0 | ||||
| "0.0" |
Wzorzec do zapamiętania:
isset()dajefalsetylko dlanulli rzeczy, które nie istnieją.empty()dajetruedla nich i dodatkowo dla każdej wartości fałszywej:false,0,0.0,"","0",[].is_null()dla istniejących zmiennych daje odwrotnośćisset(), ale ostrzega, gdy zmienna jest niezdefiniowana. Zamiast niego użyjisset()albo=== null.
Sprawdzanie, czy formularz został wysłany
isset() to klasyczny sposób sprawdzenia, czy pole formularza dotarło. Uruchom ten blok, wpisz imię i kliknij Send: ten sam skrypt wykona się ponownie z wypełnionym $_POST.
Puste pole tekstowe też jest wysyłane, jako "", więc isset($_POST["name"]) daje true po każdym wysłaniu. Niezaznaczony checkbox nie jest wysyłany wcale, dlatego isset() to dokładnie właściwy test dla checkboxów. Aby wymagać niepustej wartości, sprawdź łańcuch po przycięciu, jak robi to blok. Strona o formularzach buduje pełny formularz z walidacją.
isset vs array_key_exists
Te dwie funkcje zgadzają się we wszystkim poza kluczem o wartości null. isset() traktuje go jak brakujący, array_key_exists() nie.
Jeśli w Twoich danych „ustawione na null” znaczy co innego niż „nieskonfigurowane”, użyj array_key_exists(). W przeciwnym razie isset() jest krótsze, a jako konstrukcja językowa, a nie wywołanie funkcji, jest też nieco szybsze.
Częsty błąd: isset na wyrażeniu
isset() przyjmuje tylko zmienne, elementy tablic i właściwości. Przekazanie wyniku funkcji albo stałej to błąd kompilacji:
<?php
if (isset(trim($input))) {}
PHP Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2
Najpierw zapisz wynik w zmiennej albo sprawdź samą wartość: null !== $expr, jak sugeruje komunikat, albo trim($input) !== "" dla łańcucha.
Najczęściej zadawane pytania
Co robi isset() w PHP?
isset($x) zwraca true, jeśli $x istnieje i nie jest null, a w przeciwnym razie false. Nigdy nie zgłasza ostrzeżenia dla niezdefiniowanej zmiennej ani klucza tablicy, więc jest bezpieczne na danych żądania, jak isset($_POST['email']).
Czym różni się isset() od empty() w PHP?
isset() pyta „czy to istnieje i nie jest null”; empty() pyta „czy tego brakuje albo jest fałszywe”. Dla 0, "", "0" i [] isset() zwraca true i empty() też zwraca true. Dla null albo brakującego klucza isset() daje false, a empty() daje true. !empty($x) to to samo co isset($x) && $x o prawdziwej wartości.
Czy isset() może sprawdzić kilka zmiennych?
Tak: isset($a, $b, $c) zwraca true tylko wtedy, gdy każda z nich jest ustawiona i nie jest null. Zatrzymuje się na pierwszej, która nie jest ustawiona.
Używać isset() czy array_key_exists()?
Różnią się tylko wtedy, gdy klucz istnieje z wartością null: isset($arr['k']) zwraca false, a array_key_exists('k', $arr) zwraca true. Używaj array_key_exists, gdy null jest znaczącą zapisaną wartością; w przeciwnym razie isset jest krótsze i nieco szybsze.