Что такое isset в php

Содержание
  1. Описание
  2. Список параметров
  3. Возвращаемые значения
  4. Список изменений
  5. Примеры
  6. Примечания
  7. Смотрите также
  8. isset
  9. Описание
  10. Список параметров
  11. Возвращаемые значения
  12. Примеры
  13. Примечания
  14. Смотрите также
  15. User Contributed Notes 30 notes
  16. Стоит ли использовать isset
  17. 5 ответов 5
  18. Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.
  19. Похожие
  20. Подписаться на ленту
  21. Использование функций isset() и array_key_exists()
  22. Инициализация и удаление переменной в PHP
  23. Функция isset()
  24. Функция array_key_exists()
  25. Скорость работы isset() и array_key_exists()
  26. Функция isset() и свойства объекта
  27. Комментарии (6)
  28. Уроки PHP – Когда использовать isset(), empty() и is_null() в PHP
  29. Обзор функций isset(), empty() и is_null() в PHP
  30. Функция empty()
  31. Функция isset()
  32. Функция is_null()
  33. В чем отличие между функциями isset(), empty() и is_null() в PHP?
  34. Когда использовать функцию empty()?
  35. Когда использовать функцию isset()?
  36. Когда использовать функцию is_null()?
  37. Какой ответ возвращают функции isset(), empty() и is_null() в PHP

isset — Определяет, была ли установлена переменная значением отличным от NULL

Описание

Определяет, была ли установлена переменная значением отличным от NULL

Если были переданы несколько параметров, то isset() вернет TRUE только в том случае, если все параметры определены. Проверка происходит слева направо и заканчивается, как только будет встречена неопределенная переменная.

Список параметров

Возвращаемые значения

Список изменений

Примеры

Пример #1 Пример использования isset()

// В следующем примере мы используем var_dump для вывода
// значения, возвращаемого isset().

$a = «test» ;
$b = «anothertest» ;

Функция также работает с элементами массивов:

Пример #2 isset() и строковые индексы

Результат выполнения данного примера в PHP 5.3:

Результат выполнения данного примера в PHP 5.4:

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

При использовании isset() на недоступных свойствах объекта, будет вызываться перегруженный метод __isset(), если он существует.

Смотрите также

Источник

isset

(PHP 4, PHP 5, PHP 7, PHP 8)

isset — Определяет, была ли установлена переменная значением, отличным от null

Описание

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

Если были переданы несколько параметров, то isset() вернёт true только в том случае, если все параметры определены. Проверка происходит слева направо и заканчивается, как только будет встречена неопределённая переменная.

Список параметров

Возвращаемые значения

Примеры

Пример #1 Пример использования isset()

// В следующем примере мы используем var_dump для вывода
// значения, возвращаемого isset().

$a = «test» ;
$b = «anothertest» ;

Функция также работает с элементами массивов:

Пример #2 isset() и строковые индексы

Результат выполнения данного примера:

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

При использовании isset() на недоступных свойствах объекта, будет вызываться перегруженный метод __isset(), если он существует.

Смотрите также

User Contributed Notes 30 notes

I, too, was dismayed to find that isset($foo) returns false if ($foo == null). Here’s an (awkward) way around it.

Of course, that is very non-intuitive, long, hard-to-understand, and kludgy. Better to design your code so you don’t depend on the difference between an unset variable and a variable with the value null. But «better» only because PHP has made this weird development choice.

In my thinking this was a mistake in the development of PHP. The name («isset») should describe the function and not have the desciption be «is set AND is not null». If it was done properly a programmer could very easily do (isset($var) || is_null($var)) if they wanted to check for this!

The new (as of PHP7) ‘null coalesce operator’ allows shorthand isset. You can use it like so:

You can safely use isset to check properties and subproperties of objects directly. So instead of writing

isset($abc) && isset($abc->def) && isset($abc->def->ghi)

or in a shorter form

you can just write

without raising any errors, warnings or notices.

How to test for a variable actually existing, including being set to null. This will prevent errors when passing to functions.

«empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.»

!empty() mimics the chk() function posted before.

in PHP5, if you have

I tried the example posted previously by Slawek:

$foo = ‘a little string’;
echo isset($foo)?’yes ‘:’no ‘, isset($foo[‘aaaa’])?’yes ‘:’no ‘;

He got yes yes, but he didn’t say what version of PHP he was using.

I tried this on PHP 5.0.5 and got: yes no

But on PHP 4.3.5 I got: yes yes

Any foreach or similar will be different before and after the call.

To organize some of the frequently used functions..

Return Values :
Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

isset expects the variable sign first, so you can’t add parentheses or anything.

With this simple function you can check if an array has some keys:

If you regard isset() as indicating whether the given variable has a value or not, and recall that NULL is intended to indicate that a value is _absent_ (as said, somewhat awkwardly, on its manual page), then its behaviour is not at all inconsistent or confusing.

Here is an example with multiple parameters supplied

= array();
$var [ ‘val1’ ] = ‘test’ ;
$var [ ‘val2’ ] = ‘on’ ;

The following code does the same calling «isset» 2 times:

= array();
$var [ ‘val1’ ] = ‘test’ ;
$var [ ‘val2’ ] = ‘on’ ;

Note that isset() is not recursive as of the 5.4.8 I have available here to test with: if you use it on a multidimensional array or an object it will not check isset() on each dimension as it goes.

Imagine you have a class with a normal __isset and a __get that fatals for non-existant properties. isset($object->nosuch) will behave normally but isset($object->nosuch->foo) will crash. Rather harsh IMO but still possible.

// pretend that the methods have implementations that actually try to do work
// in this example I only care about the worst case conditions

// if property does not exist <
echo «Property does not exist!» ;
exit;
// >
>

$obj = new FatalOnGet ();

Uncomment the echos in the methods and you’ll see exactly what happened:

On a similar note, if __get always returns but instead issues warnings or notices then those will surface.

The following is an example of how to test if a variable is set, whether or not it is NULL. It makes use of the fact that an unset variable will throw an E_NOTICE error, but one initialized as NULL will not.

The problem is, the set_error_handler and restore_error_handler calls can not be inside the function, which means you need 2 extra lines of code every time you are testing. And if you have any E_NOTICE errors caused by other code between the set_error_handler and restore_error_handler they will not be dealt with properly. One solution:

?>

Outputs:
True False
Notice: Undefined variable: j in filename.php on line 26

This will make the handler only handle var_exists, but it adds a lot of overhead. Everytime an E_NOTICE error happens, the file it originated from will be loaded into an array.

Источник

Стоит ли использовать isset

Мои настройки php и настройки php на хостинге не ругаются если использовать запись if ($_POST[‘specialist_id’]) <. >.

Хорошему программисту на php лучше использовать if (isset($_POST[‘specialist_id’])) <. >или не возбраняется писать просто if ($_POST[‘specialist_id’]) <. >?

35g2p

5 ответов 5

Рекомендую всегда использовать isset() в данном контексте.

photo

isset проверяет на существование переменную или элемент массива. А сам if проверяет уже значение. Это совершенно разные конструкции. Рекомендуеться проверять и на наличие переменной и само значение.

VpFBb

bljdb

Для полного эквивалента вашего условия нужно проверять не только что переменная задана, но и что значение у нее есть:

Другим вариантом может быть отключить ругань в вашем варианте:

Впрочем на последний многие будут смотреть с опаской и подозрением.

Проверку на то, что переменная или ключ массива существует, нужно делать только в том случае, если вы не уверены, что этой переменной или ключа массива может не быть.
Это относится к тем областям. где переменная или ключ массима создается динамически или может быть удален в ходе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.21.40254

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Использование функций isset() и array_key_exists()

Навеяно проблемой, с которой я столкнулся из-за неправильного использования функции isset() в одном китайском движке интернет магазина. Там isset() применялась для определения существования элемента массива с некоторым ключом. Самое неприятное в данной ситуации то, что такую ошибку допускают многие. Это не первый случай, когда isset() используется именно в таком контексте, хотя это в корне неверно. Но в этот раз неграмотность разработчиков стоила мне потерянного времени, что и сподвигло меня на эту заметку.

Собственно, об уровне квалификации PHP программистов сказано немало и добавить к этому нечего.

Инициализация и удаление переменной в PHP

В PHP переменная инициализируется в момент присваивания ей значения. Неинициализированной переменная считается в двух случаях:

Функция isset()

Функция проверяет факт инициализации переменной. isset() вернет false, если передать ей в качестве параметра неинициализированную переменную. Тоже самое произойдет и с ключом массива, который имеет NULL значение. Для ключей массива действуют такие же правила приведения к NULL, как и для переменных.

Результат:

Функция array_key_exists()

Для массива использование NULL значения ключа удобно, если наличие ключа требуется сохранить. Можно будет рассчитывать на контекст, в котором данный ключ будет использован. Например, это удобно при заполнении полей формы дефолтными значениями. Например, при использовании конструкции echo, NULL значение будет приведено к пустой строке.

То, к чему я клоню, мне кажется очевидным. Если вы работаете с ключами массива, то используйте именно ту функцию, которая для этого предназначена. Ко всему прочему, использование array_key_exists() позволяет точно понять логику приложения. Никакой двусмысленности не возникает.

Скорость работы isset() и array_key_exists()

О том, что array_key_exists() работает медленнее isset() пишут даже в комментариях к соответствующей странице PHP мануала. Жалуются на то, что более медленная работа array_key_exists() заметна на массивах с количеством пар ключ-значение, превышающих 200.

Ничего не остается, как прогнать банальный тест:

Версия Описание
5.4.0
isset() array_key_exists()
0.687027 0.728652

Тест, безусловно, очень простой и достаточно субъективный. Было бы неплохо сделать замеры используемой памяти, например. Но глядя на результаты этого теста, у меня нет никакого желания продолжать заниматься мышиной возней. Очевидно, что выигрыша в скорости попросту нет.

Функция isset() и свойства объекта

Совсем клиническим случаем можно считать использование isset() для проверки существования свойства у объекта.

Не так часто, как в случае с массивами, но доводится встречать подобные условия:

Случай вопиющий, так как использование NULL в качестве дефолтного значения свойств – очень распространенная практика. И проверять наличие свойства объекта через isset() просто недопустимо.

Также замечу, что для использования property_exists() не требуется наличие объекта класса. Проверку можно произвести по имени класса и имени свойства.

Такое вот занимательное программирование.

Комментарии (6)

Вечер добрый!
Очень классные статьи, большое спасибо за них!

Вы все верно поняли. На самом деле, практически повсеместно используется isset(). Иногда из-за этого возникают логические ошибки в приложениях, что и стало причиной написания данной заметки.

Не надо людей вводить в заблуждение и навязывать свои ошибочные мысли.
В мануале от создателей PHP явно сказано, что isset используется и для проверки элементов массива.
И это правильно. А вот использовать элемент массива с NULL и считать этот элемент существующим, это ошибка.
Вот из-за таких как ты и приходится потом сутками сидеть и разгребать больные коды и не понимать, почему же блин переменные NULL существуют.

Максим, во-первых, я вам вам не «ты». А во-вторых, мир сложнее, чем вам кажется и нужно беречь свои нервы, а то не хватит сил на разгребание больных кодов :))
И если NULL значение в массиве — это ошибка, то это ошибка в интерпретаторе PHP. Но, думаю, дело все в том, что вы просто не понимаете смысл типа данных NULL.

Олег, вы не правы в ряде моментов. Не стоит «гнать» на PHP разработчиков, т.к. те кто ними являются, пишут хороший код. А то, что вы всех, кто написал строчку кода на PHP называете PHP-программистом, это лично ваши «психо-половые» проблемы. Второй момент, насчет NULL: в языке PHP смысл языковой конструкции null отличается от той же конструкции SQL … и не стоит и пытаться друг на друга «натягивать». Это не проблема языка, т.к. авторы языка вольны толковать как им вздумается «сколько людей, столько и мнений.». Третий момент, если Вы знаете, что PHP-разработчики пишут плохой код, то зачем вы его используете? Пишите сами или используете код других языков. Я могу понять, что писали вы пост под влиянием эмоций, но я так и не понял, что было не так в том коде «китайского движка» и что у вас не выходило? 🙂 Напишите название движка, чтобы люди знали о том, и что тут могут вылезти проблемы при использовании и место возникновения проблемы.

На 100 000 итерации isset работает в 6 раз быстрее.

Источник

Уроки PHP – Когда использовать isset(), empty() и is_null() в PHP

Довольно часто, при написании PHP кода, возникают ситуации, когда рабочий на вид код не работает. После некоторых изысканий, вы обнаруживаете, что использовали неправильную функцию для проверки переменной в PHP. Существует много функций в PHP, которые предназначены для проверки состояния и значения переменных, в том числе те, которые могут уведомлять вас, есть ли какое-то значение, доступное вообще для использования. Среди этих функций, выделяются особенно три: isset(), empty() и is_null(),которые легко перепутать.

В сегодняшнем уроке мы рассмотрим основные отличия этих функций, а также примеры их использования в PHP.

Обзор функций isset(), empty() и is_null() в PHP

Все эти три функции встроены в PHP, поэтому при написании кода они всегда доступны для использования. Первые две – empty() и isset() – это языковые конструкции, а is_null() – это стандартная функция. При проверке кода необходимо помнить, что языковые конструкции в PHP немного быстрее (но, честно говоря, не значительно), их нельзя использовать в переменных функциях, и они не выдают ошибки при оценке переменных, которых не существует.

Давайте для начала рассмотрим синтаксис и краткое описание этих трех функций, которое указано в официальном руководстве php.net.

Функция empty()

Синтаксис функции:

Функция isset()

Синтаксис функции:

Функция is_null()

Синтаксис функции:

В чем отличие между функциями isset(), empty() и is_null() в PHP?

Из приведенных выше определений видно, что эти три функции выполняют сходные, но не одинаковые функции. С помощью этих функций вы можете проверять, является ли переменная нулевой (NULL), истинной (TRUE) или ложной (FALSE), а также была ли переменная объявлена.

Когда использовать функцию empty()?

Когда использовать функцию isset()?

В приведенном выше примере мы объявили нашу переменную в виде строки, а затем проверили, установлена ли переменная (установлена), и она не равна другой строке (она не равна). Поскольку оба этих условия верны, мы в этом условии можем проводить дальнейшие действия с переменной и ее значением.

Когда использовать функцию is_null()?

В противном случае функция is_null() не только не будет правильно работать, но и будет возвращать уведомление из-за невозможности провести проверку. Обычно уведомление выглядит примерно так:

Какой ответ возвращают функции isset(), empty() и is_null() в PHP

В приведенной ниже таблице рассмотрены основные результаты использования данных функций в PHP коде:

Источник

Справочник по обустройству дома и дачи
Adblock
detector