Isset: примеры (PHP)

Руководство по работе с функцией isset в PHP 8
Раздел: Работа с переменными
isset(mixed $var, mixed ...$vars): bool
Основные сведения о функции isset()

Функция isset() в PHP проверяет, была ли установлена переменная и не равна ли она значению null. Эта функция возвращает true, если переменная существует и ее значение не null, в противном случае возвращается false.

Основное применение функции - проверка существования переменных, особенно полученных из внешних источников, таких как данные форм, параметры URL или массивы сессий, перед их использованием в коде.

Аргументы функции

Функция isset() принимает переменное количество аргументов (от одного до нескольких):

  • var - первый аргумент, проверяемая переменная
  • ... - дополнительные переменные для проверки (необязательные)

Функция возвращает true только если все переданные переменные существуют и не равны null.

Базовые примеры использования isset()
Проверка одной переменной
$var = 'значение';
echo isset($var) ? 'true' : 'false';
true
Проверка несуществующей переменной
echo isset($undefinedVar) ? 'true' : 'false';
false
Проверка переменной со значением null
$var = null;
echo isset($var) ? 'true' : 'false';
false
Проверка нескольких переменных
$a = 1;
$b = null;
$c = 'test';
echo isset($a, $b, $c) ? 'true' : 'false';
false
Проверка элемента массива
$array = ['key' => 'value'];
echo isset($array['key']) ? 'true' : 'false';
true
Альтернативные функции в PHP

В PHP существуют другие функции для проверки переменных:

Проверяет, пуста ли переменная. Возвращает true для пустой строки, 0, null, false, пустого массива и необъявленной переменной.

$var = '';
echo empty($var) ? 'true' : 'false';
true
array_key_exists()

Проверяет существование ключа в массиве, даже если его значение равно null.

$array = ['key' => null];
echo array_key_exists('key', $array) ? 'true' : 'false';
true

Определяет, является ли переменная null, но вызывает предупреждение для необъявленных переменных.

$var = null;
echo is_null($var) ? 'true' : 'false';
true

Функция isset() предпочтительнее для проверки существования переменных перед использованием, особенно внешних данных. Функция empty() удобна для проверки заполненности значений, но имеет более широкую трактовку "пустоты".

Типичные ошибки при использовании isset()
Проверка недоступных свойств объекта

При проверке приватных или защищенных свойств извне класса возникает ошибка:

class Test {
    private $privateProp = 'value';
}
$obj = new Test();
var_dump(isset($obj->privateProp));
Fatal error: Cannot access private property Test::$privateProp
Неверная проверка вложенных структур

Попытка проверить несколько уровней вложенности без промежуточных проверок:

$data = [];
var_dump(isset($data['level1']['level2']['level3']));
false
Смешивание с empty()

Разное поведение при проверке значений 0 и пустой строки:

$value = 0;
var_dump(isset($value));
var_dump(empty($value));
bool(true)
bool(true)
Проверка результатов функций

Попытка проверки возвращаемого значения функции без его сохранения:

function getValue() {
    return null;
}
var_dump(isset(getValue()));
Parse error: syntax error
Изменения в последних версиях PHP
PHP 8.0

В PHP 8.0 функция isset() может использоваться в выражениях совместно с оператором nullsafe:

class User {
    public ?Address $address = null;
}

class Address {
    public string $street;
}

$user = new User();
var_dump(isset($user->address->street));
bool(false)
PHP 7.0

Улучшена обработка isset() с элементами массивов и свойств объектов, возвращающих null. Функция стала более стабильной при работе с большими уровнями вложенности.

Оптимизации производительности

Начиная с PHP 7.4, функция isset() получила внутренние оптимизации для более быстрой проверки переменных, особенно при работе с массивами.

Расширенные примеры использования isset()
Проверка цепочки элементов массива
Пример php
$config = [
    'db' => [
        'host' => 'localhost',
        'port' => null
    ]
];

$hostExists = isset($config['db']['host']);
$portExists = isset($config['db']['port']);
$userExists = isset($config['db']['user']);

echo "Host exists: " . ($hostExists ? 'yes' : 'no') . "
"; echo "Port exists: " . ($portExists ? 'yes' : 'no') . "
"; echo "User exists: " . ($userExists ? 'yes' : 'no') . "
";
Host exists: yes
Port exists: no
User exists: no
Безопасное использование переменных
Пример php
// Без проверки (опасно)
// $value = $_GET['param'];

// С проверкой (безопасно)
if (isset($_GET['param'])) {
    $value = $_GET['param'];
    echo "Значение параметра: $value";
} else {
    echo "Параметр не передан";
}
Проверка нескольких полей формы
Пример php
$requiredFields = ['name', 'email', 'phone'];
$allFieldsPresent = true;

foreach ($requiredFields as $field) {
    if (!isset($_POST[$field])) {
        $allFieldsPresent = false;
        break;
    }
}

echo "Все поля заполнены: " . ($allFieldsPresent ? 'да' : 'нет');
Использование с оператором объединения
Пример php
$default = 'значение по умолчанию';
$result = isset($userInput) ? $userInput : $default;

// Аналогично с оператором ?? (PHP 7+)
$result = $userInput ?? $default;
Динамическая проверка свойств объекта
Пример php
class Product {
    public $id;
    public $name;
    private $price;
    
    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$product = new Product(1, 'Товар');
$properties = ['id', 'name', 'price', 'undefined'];

foreach ($properties as $prop) {
    echo "$prop: " . (isset($product->$prop) ? 'есть' : 'нет') . "
"; }
id: есть
name: есть
price: нет
undefined: нет
Аналоги в других языках программирования

Isset в Javascript

В JavaScript используется оператор typeof и сравнение с undefined:

let variable;
console.log(typeof variable !== 'undefined' && variable !== null);
console.log(variable !== undefined && variable !== null);
false
false

Isset в Python

В Python проверка осуществляется через оператор in для словарей или через try/except:

data = {'key': 'value'}
print('key' in data)
print(data.get('key') is not None)
True
True

Isset в MySQL

В MySQL используется функция ISNULL() и оператор IS NOT NULL:

SELECT ISNULL(NULL) as result;
SELECT column IS NOT NULL FROM table;
result: 1

Isset в Java

В Java проверка на null выполняется прямым сравнением:

String str = null;
System.out.println(str != null);
false

Основное отличие PHP функции isset() от аналогов в других языках - возможность проверки нескольких переменных одновременно и отсутствие ошибок при проверке необъявленных переменных.

PHP isset function comments

En
Isset Determine if a variable is declared and is different than null