NULL в PHP

Значения NULL в PHP используются редко и в большинстве случаев поступают из БД MySQL. Следует учесть, что NULL это не FALSE, TRUE или что-либо еще, а именно NULL. И чтобы понять, какой результат будет получен при проверке значений переменной, можно воспользоваться скриптом PHP, текст которого приведен ниже:

Пример работы нескольких функций, по определению переменных
for ($i = 0; $i < 5; $i++)
  {
  unset($var_null);
  switch ($i)
    {
    case 0:
      $var_null_txt = '$var_null не определена или удалена: unset($var_null)';
      break;
    case 1:
      $var_null = '';
      $var_null_txt = '$var_null = \'\'';
      break;
    case 2:
      $var_null = null;
      $var_null_txt = '$var_null = null';
      break;
    case 3:
      $var_null = 0;
      $var_null_txt = '$var_null = 0';
      break;
    case 4:
      $var_null = 'T';
      $var_null_txt = '$var_null = \'T\'';
      break;
    }
   
  echo '<h2>'.$var_null_txt.'</h2>';
 
  $ret = ($var_null === null) ? '<span style="color: green; font-weight: bold">TRUE</span>' : '<span style="color: red; font-weight: bold">FALSE</span>';
  echo 'if ($var_null === null) -> '.$ret.'<br>';
 
  // is_null() возвращает TRUE для переменных, которым присвоено значение NULL
  // или не присвоено никакого значения.
  $ret = (is_null($var_null)) ? '<span style="color: green; font-weight: bold">TRUE</span>' : '<span style="color: red; font-weight: bold">FALSE</span>';
  echo 'if (is_null($var_null)) -> '.$ret.'<br>';

  // isset() возвращает TRUE для переменных, которым ПРИСВОЕНО любое значение кроме NULL.
  $ret = (isset($var_null)) ? '<span style="color: green; font-weight: bold">TRUE</span>' : '<span style="color: red; font-weight: bold">FALSE</span>';
  echo 'if (isset($var_null)) -> '.$ret.'<br>';
 
  $ret = (empty($var_null)) ? '<span style="color: green; font-weight: bold">TRUE</span>' : '<span style="color: red; font-weight: bold">FALSE</span>';
  echo 'if (empty($var_null)) -> '.$ret.'<br>';
  }

Следует учесть, что если переменной не присвоено никакого значения или она удалена при помощи unset(), функция is_null() сгенерирует предупреждение "Undefined variable", в отличии от функции isset(), которая не выдаст вообще никаких предупреждений. После выполнения скрипта, будет получен такой результат:

$var_null не определена или удалена: unset($var_null)

if ($var_null === null) -> TRUE
if (is_null($var_null)) -> TRUE
if (isset($var_null)) -> FALSE
if (empty($var_null)) -> TRUE

$var_null = ''

if ($var_null === null) -> FALSE
if (is_null($var_null)) -> FALSE
if (isset($var_null)) -> TRUE
if (empty($var_null)) -> TRUE

$var_null = null

if ($var_null === null) -> TRUE
if (is_null($var_null)) -> TRUE
if (isset($var_null)) -> FALSE
if (empty($var_null)) -> TRUE

$var_null = 0

if ($var_null === null) -> FALSE
if (is_null($var_null)) -> FALSE
if (isset($var_null)) -> TRUE
if (empty($var_null)) -> TRUE

$var_null = 'T'

if ($var_null === null) -> FALSE
if (is_null($var_null)) -> FALSE
if (isset($var_null)) -> TRUE
if (empty($var_null)) -> FALSE

А как же всетаки определить, присвоено переменной значение NULL или она не определена, если оператор сравнения if(is_null($var_null)) и if(!isset($var_null)) реагируют одинаково? Для этого, необходимо заглянуть в массив переменных, получаемый с помощью функции get_defined_vars():

if (array_key_exists('var_null', get_defined_vars()) )
  echo 'Переменная $var_null определена';
else
  echo 'Переменная $var_null не определена';

При работе с массивами, также следует учитывать, что функция isset($row['name']) вернет значение FALSE, если массиву $row ключу "name" ($row['name']) присвоено значение NULL или $row['name'] вообще не определен. На помощь в разрешении неоднозначности снова прийдет функция array_key_exist():

if (array_key_exists('name', $row))
  echo 'Ключ "name" определен';
else
  echo 'Ключ "name" не определен';
Опубликовано: 2011/10/16
HTML-код ссылки на эту страницу:
<a href="http://petrenco.com/php.php?txt=98" target="_blank">NULL в PHP</a>
8398
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.