воскресенье, 8 июля 2012 г.

Различие между empty и isset


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

Оператор isset() проверяет существование переменной или члена массива, и, не зависимо от значения внутри, возвратит true.
Практически это позволяет сделать следующее:
<?php
echo isset($_GET['test']);
?>
Если переменная была введена, будет выведено 1, если нет - 0 (фактически, возвращается true/false, но при echo они переводятся в цифровой эквивалент).
Обратите внимание, isset()-это оператор(часть языка), пусть и выглядит как функция. Именно потому, что это не функция, не будет выведена ошибка, даже если $_GET['test'] не существует.
Если бы передать несуществующую переменную в функцию, была бы выведена ошибка Notice, которую пришлось бы "глушить" с помощью символа @ или отключать ошибки php на уровне .htaccess.

Оператор empty() не только проверяет существование переменной, но также проверяет, не пустое ли значение этой переменной!
Перед этим нужно хорошо подумать-а что же есть пустым значением? Перечислю все случаи:
Логическое false
пустая строка
пустой массив array()
цифровое значение 0
специальное значение NULL.
Если переменная не существует, или имеет одно с выше указанных значений, то будет возвращено true, иначе-false.
То есть, отличие этих операторов состоит в том, что emtpy имеет более высокий критерий оценки, и не только проверяет существование переменной, но и ее значение, в отличие от isset().

Важное замечание.
Так как они оба операторы, для них имеет значение то, что передается внутрь.
Если в любую с функций передать функцию или константу, будет возвращена некрасивая и непонятная ошибка;-)
Поэтому всегда надо иметь в виду, что эти операторы проверяют только переменные, члены массива и объекты!
Удачного изучения!

Комментариев нет:

Отправить комментарий