Документация для разработчиков
Темная тема

is_set

Описание и параметры

bool
is_set(
	mixed &var,
	string key = false
);

Проверяет переменную (или ключ массива) на существование. Возвращает "true", если переменная var установлена, либо найден ключ key среди ключей массива var. В противном случае возвращает "false".

Примечание. При проверке на существование элемента массива, необходимо учитывать, что в отличии от стандартной функции isset, данная функция возвратит "true", даже если найденный элемент массива имеет значение "null" (см. пример ниже).

Параметры функции

ПараметрОписание
var В данном параметре может задаваться переменная произвольного типа. Если это массив, то в key необходимо задать ключ, существование которого будет проверено. Если в var задать не массив, то функция просто проверит инициализирована ли данная переменная или нет (в этом случае работа функции будет идентичная стандартной PHP функции isset).
key Если в var задан массив, то в данном параметре необходимо задать ключ для проверки его наличия в массиве var.

Пример использования

<?

/********************************************
            пример на массиве
********************************************/

$ar = array("a" => "", "b" => null);

if (is_set($ar, "a")) echo 'Ключ "a" в массиве $ar найден.';
else echo 'Ключ "a" в массиве $ar не найден.';
// на экране будет: "Ключ "a" в массиве $ar найден."

if (isset($ar["a"])) echo 'Элемент массива $ar с ключом "a" инициализирован.';
else echo 'Элемент массива $ar с ключом "a" не инициализирован.';
// на экране будет: "Элемент массива $ar с ключом "a" инициализирован."

if (is_set($ar, "b")) echo 'Ключ "b" в массиве $ar найден.';
else echo 'Ключ "b" в массиве $ar не найден.';
// на экране будет: "Ключ "b" в массиве $ar найден."

// НО!
if (isset($ar["b"])) echo 'Элемент массива $ar с ключом "b" инициализирован.';
else echo 'Элемент массива $ar с ключом "b" не инициализирован.';
// (!) на экране будет: "Элемент массива $ar с ключом "b" не инициализирован."


if (is_set($ar, "с")) echo 'Ключ "с" в массиве $ar найден.';
else echo 'Ключ "с" в массиве $ar не найден.';
// на экране будет: "Ключ "с" в массиве $ar не найден."



/********************************************
  пример на обычной переменной (не массиве)
********************************************/

$init_var = "A";
if (is_set($init_var)) echo 'Переменная $init_var инициализированна.';
else echo 'Переменная $init_var не инициализированна.';
// на экране будет: "Переменная $init_var инициализированна."

if (is_set($not_init_var)) echo 'Переменная $init_var инициализированна.';
else echo 'Переменная $init_var не инициализированна.';
// на экране будет: "Переменная $init_var не инициализированна."
?>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
6
Василий Юдин
Никогда не пользуйтесь этой функцией  :)  

Во-первых, сразу вопрос: а зачем ее использовать? Как минимум, она повторяет нативную функцию isset, а потом джуны путают на экзамене есть ли в php is_set или нету.
Во-вторых, если ей не передать второй параметр - она сделает таки этот нативный isset.
В-третьих, IDE (тот же, любимый джунами, эклипс) автоподставляет is_set при печати "is" + ctrl+пробел

И что мы получаем? событие OnBeforeIBlockElementUpdate. Проверка в нем типа такой

Код
 is_set($array['PROPERTY_VALUES']['TEST']); 


Никто ведь документацию не читает (особенно коменты к ней) http://php.net/manual/en/function.isset.php
Если сделать функцию, которая принимает ссылку на переменную и этой ссылке сделать isset *мегапуть* - этот путь будет создан.
Вот вам пример
Код
 $array = array(
   "a" => 1,
   "b" => 2
);

is_set($array['PROPERTY_VALUES']['TEST']);   

var_dump($array); 

И что же в итоге?
Контентщик деактивирует элемент в админке из списка. По факту в массиве на апдейт только 'ACTIVE' => 'N'. После is_set там еще и массив с доп свойствами.
И битрикс после этого изменяет активность и ВСЕ доп свойства. Последние, конечно, обнуляет.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх