Isset php что это
Если переменная объявлена, но ей изначально не присвоено никакого значения (иначе говоря она не инициализирована), или если переменная вовсе неопределена, то нам будет проблематично ее использовать. Например:
При попытке вывести значение переменной мы получим диагностическое сообщение о том, что переменная не определена:
Warning: Undefined variable $a in C:\localhost\hello.php on line 10
Ситуация может показатся искуственной. Тем не менее нередко переменные в PHP получают некоторые данные извне, например, ввод пользователя. Соответственно возникает необходимость перед использованием данных проверить, что эти данные определены, что они имеются.
Для проверки существования переменной PHP предоставляет ряд встроенных функций.
Оператор isset
Функция isset() позволяет определить, инициализирована ли переменная или нет. Если переменная определена, то isset() возвращает значение true . Если переменная не определена, то isset() возвращает false . Также если переменная имеет значение null функция isset() также возвращает false .
Здесь переменная $message не инициализирована, поэтому выражение isset($message) будет возвращать значение false .
переменная message не определена
Теперь пусть переменная $message имеет начальное значение:
$message = "Hello PHP"; if(isset($message)) echo $message; else echo "переменная message не определена";
В этом случае выражение isset($message) будет возвращать true , поэтому будет выполняться инструкция echo $message :
Hello PHP
Однако если переменной присвоено начальное значение null , то опять же будет считаться, что эта переменная не установлена:
$message = null; if(isset($message)) echo $message; else echo "переменная message не определена";
переменная message не определена
empty
Функция empty() проверяет переменную на «пустоту». «Пустая» переменная — это переменная, значение которой равно null , 0, false или пустой строке — в этом случае функция empty() возвращает true :
Здесь переменная $message хранит пустую строку, поэтому выражение empty($message) возвратит true .
переменная message не определена
При этом если строка содержит даже хотя бы один пробел и больше ничего ( $message = » » ), то такая строка уже не считается пустой.
unset
С помощью функции unset() мы можем уничтожить переменную:
Но, как правило, необходимость в подобном удалении переменной возникает редко, так как PHP автоматически удаляет переменные, когда завершается выполнение контекста (например, функции), в котором определены эти переменные.
isset
Если переменная была удалена с помощью unset() , то она больше не считается установленной. isset() вернет FALSE , если проверяемая переменная имеет значение NULL . Следует помнить, что NULL -байт («\0») не является эквивалентом константе PHP NULL .
Если были переданы несколько параметров, то isset() вернет TRUE только в том случае, если все параметры определены. Проверка происходит слева направо и заканчивается, как только будет встречена неопределенная переменная.
Список параметров
Возвращаемые значения
Возвращает TRUE , если var определена и значение отличное от NULL , и FALSE в противном случае.
Список изменений
Проверка нечислового индекса строки теперь возвращает FALSE .
Примеры
Пример #1 Пример использования isset()
// Проверка вернет TRUE, поэтому текст будет напечатан.
if (isset( $var )) echo «Эта переменная определена, поэтому меня и напечатали.» ;
>
// В следующем примере мы используем var_dump для вывода
// значения, возвращаемого isset().
$a = «test» ;
$b = «anothertest» ;
var_dump (isset( $a )); // TRUE
var_dump (isset( $a , $b )); // TRUE
var_dump (isset( $a )); // FALSE
var_dump (isset( $a , $b )); // FALSE
$foo = NULL ;
var_dump (isset( $foo )); // FALSE
Функция также работает с элементами массивов:
$a = array ( ‘test’ => 1 , ‘hello’ => NULL , ‘pie’ => array( ‘a’ => ‘apple’ ));
var_dump (isset( $a [ ‘test’ ])); // TRUE
var_dump (isset( $a [ ‘foo’ ])); // FALSE
var_dump (isset( $a [ ‘hello’ ])); // FALSE
// Элемент с ключом ‘hello’ равен NULL, поэтому он считается неопределенным
// Если Вы хотите проверить существование ключей со значением NULL, используйте:
var_dump ( array_key_exists ( ‘hello’ , $a )); // TRUE
// Проверка вложенных элементов массива
var_dump (isset( $a [ ‘pie’ ][ ‘a’ ])); // TRUE
var_dump (isset( $a [ ‘pie’ ][ ‘b’ ])); // FALSE
var_dump (isset( $a [ ‘cake’ ][ ‘a’ ][ ‘b’ ])); // FALSE
Пример #2 isset() и строковые индексы
В PHP 5.4 был изменен способ обработки строковых индексов в isset() .
$expected_array_got_string = ‘somestring’ ;
var_dump (isset( $expected_array_got_string [ ‘some_key’ ]));
var_dump (isset( $expected_array_got_string [ 0 ]));
var_dump (isset( $expected_array_got_string [ ‘0’ ]));
var_dump (isset( $expected_array_got_string [ 0.5 ]));
var_dump (isset( $expected_array_got_string [ ‘0.5’ ]));
var_dump (isset( $expected_array_got_string [ ‘0 Mostel’ ]));
?>?php
Результат выполнения данного примера в PHP 5.3:
bool(true) bool(true) bool(true) bool(true) bool(true) bool(true)
Результат выполнения данного примера в PHP 5.4:
bool(false) bool(true) bool(true) bool(true) bool(false) bool(false)
Примечания
Внимание
isset() работает только с переменными, поэтому передача в качестве параметров любых других значений приведет к ошибке парсинга. Для проверки определения констант используйте функцию defined() .
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Замечание:
При использовании isset() на недоступных свойствах объекта, будет вызываться перегруженный метод __isset(), если он существует.
Смотрите также
- empty() — Проверяет, пуста ли переменная
- __isset()
- unset() — Удаляет переменную
- defined() — Проверяет существование указанной именованной константы
- Таблица сравнения типов
- array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
- is_null() — Проверяет, является ли значение переменной равным NULL
- Оператор управления ошибками @
PHP, функция isset(), нюансы в определении
По мотивам заведенного бага (см. внизу секцию «comments») Ссылка на страницу документации В английской документации сказано:
isset — Determine if a variable is set and is not NULL
В русской переведено так:
isset — Определяет, была ли установлена переменная значением отличным от NULL
Автор багрепорта настаивает на исправлении перевода на следующий:
isset — Определяет, была ли создана переменная и установлена значением отличным от NULL
И все бы ничего, но в процессе дискуссии всплыло следующее:
Именно в моей учебной группе пару учеников не смогли понять что isset определяет что переменная была создана! И с точки зрения ЛОГИКИ они правы.
И вот тут я впал в ступор. Мне кажется, что вопрос ушел в какую то совсем не ту степь, и упор на то, что isset определяет что переменная была создана несет скорее вред, чем пользу. Собственно хочется услышать мнение профессионалов в PHP, это я дурак и ничего не понимаю или автору багрепорта хочется странного?
Отслеживать
задан 29 июл 2017 в 10:36
13.9k 4 4 золотых знака 33 33 серебряных знака 51 51 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В PHP, созданная переменная — это такая, запись о которой присутствует в symbol table . Запись в symbol table появляется тогда, когда переменной присваивается значение (хоть бы и null).
Т.е. если рассуждать в контексте исполнения PHP-скрипта, переменная создана и переменной присвоено значение — по сути синонимы.
isset возвращает возвращает false в двух случаях:
- Переменная равна null
- Переменная отсутствует в symbol table
Фактически, isset возвращает true , если переменной было присвоено любое значение, кроме null , что и написано в текущем варианте страницы описания.
Т.е. предложенный вариант
isset — Определяет, была ли создана переменная и установлена значением отличным от NULL
по сути является маслом масляным, так как при исполнении PHP-скрипта, была ли создана переменная и установлена значением — означают одно и тоже, но при этом, переусложняют и запутывают определение.
Isset php что это
Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 28.10.2023)
320
324
вертолетов
9749
артиллерия
558
9524
20