Практика использования функции PHP empty()

0
0

Современное программирование давно и успешно манипулирует нетипированными переменными. Тип переменной можно не указывать заранее и менять его в процессе выполнения программы.

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

О пустом и не существующем

Функция PHP empty() обратна функции isset() и имеет некоторые особенности использования. Если переменной нет, то первая функция отзывается об этом положительно и ее результат - true, а вторая - отрицательно, то есть ее значением будет false.

PHP empty

По определению isset() призвана проверять существование переменной. Не имеет значения, что и как было присвоено переменной, главное, что она есть и не уничтожена функцией unset(). Результат функции isset() будет положительными - true. Важно помнить, что если $iVar = 0; то isset($iVar) будет true, но и empty($iVar) будет тоже true.

В первом случае результат означает, что переменная существует, во втором случае - переменная пустая, то есть значение "0" в любом его виде, будь то строка ("0") или число (дробное - 0.0 или целое - 0) все равно: empty($iVar) будет равно true.

О безопасности и контроле

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

PHP empty object

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

Вызывая функцию, вовсе не обязательно передавать все параметры, можно передать лишь существенную их часть. Функция "обязана" проверить наличие и существование всех параметров. Те из них, которые отсутствуют или имеют неверные значения, необходимо привести к нормальному виду, присвоить им нужные значения.

В этом контексте функция PHP empty() имеет существенное значение. Выражение:

$a = "1;2" + 20

присвоит переменной $a значение 21, поскольку первая часть выражения будет представлена как 1, а вторая так и будет 20.

Результат будет иметь тип число и функция PHP empty($a) будет иметь результат - false, то есть переменная $a не пустая.

В этом контексте, имея функцию:

funcTest($a = 0, $b = 20)

при вызове:

$res = funcTest($aVal, $bVal)

будет иметь желаемое, то есть результат функции. А при вызове:

  • $res = funcTest($aVal. $bVal)

в тело функции попадает только один параметр со значением '$aVal . $bVal' и скорее всего этот параметр будет интерпретирован как строка символов.

PHP empty() для объектов и массивов

Синтаксис языка имеет достаточное количество конструкций и функций для работы с объектами и массивами, однако с точки зрения проверки их на существование и на наличие значения особых отличий от переменных нет.

PHP empty array

PHP empty (array) - эквивалентно вызову empty (simple variable). Однако в отношении объектов есть весьма существенные соображения. Что касается проверки объекта на существование (isset), вопрос вряд ли имеет смысл. Что касается функции PHP empty(), то целесообразность ее использования остается под вопросом.

По логике объектно-ориентированного программирования, объект имеет собственное содержание и собственный набор методов. Сказать пустой он или не пустой может только сам объект, но не сторонняя функция, пусть даже входящая в синтаксис языка.

Объект и его функция empty()

На этом простом, но законном, основании следует рассматривать всякий объект в контексте его понимания "пустоты". Например, реализация объекта "Штатное расписание" состоит из записей "Сотрудник". Но если нет ни одного сотрудника, то в "Штатном расписании" всегда есть варианты должностей вероятных сотрудников.

На каком уровне применить здесь функцию PHP empty object? На уровне "Штатное расписание" все существует, даже если нет ни одного сотрудника. На уровне "Сотрудник" объект уже есть, даже если он заполнен не полностью. А не полностью заполненный объект можно отнести к пустому объекту. Пользы от него штатному расписанию никакой.

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