Menu

PHP isset(): czy zmienna lub klucz tablicy jest ustawiony

isset($var) zwraca true, gdy zmienna istnieje i nie jest null, a w przeciwnym razie false, bez żadnego ostrzeżenia. Sprawdza też klucze tablic i właściwości obiektów: isset($user['email']). Poznaj isset z kilkoma zmiennymi, zagnieżdżone klucze, isset vs empty, isset vs array_key_exists i sprawdzanie wysłania formularza.

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

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.

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

Wzorzec do zapamiętania:

  • isset() daje false tylko dla null i rzeczy, które nie istnieją.
  • empty() daje true dla 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żyj isset() 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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ