isset при NULL

  • Автор темы Автор темы HraKK
  • Дата начала Дата начала
Re: isset при NULL

Автор оригинала: HraKK
Представте себе ситуацию когда у нас может быть переменая $var или не определена или иметь значемние NULL.
И надо проверить какая же их этих 2 ситуаций у нас.
isset в любом случии будет false.
is_null при неопределенности выдаст notice.

Варианты?
Вариантов нет.
Переменная считается NULL, если
- ей присвоена константа NULL
- ей вообще не присвоено какое-либо значение
- она была unset()
Хотя...:D
PHP:
<?php
error_reporting(E_ALL);
set_error_handler('errorHandler');

function errorHandler()
{
	throw new Exception('Variable "$var" not defined.');
}

try {
	if (is_null($var))
		echo 'Variable "$var" is null.';
	else
		echo 'Variable "$var" is defined.';
}
catch (Exception $e) {
	echo $e->getMessage();
}
?>
 
itprog
Читай внимательно, все верно ты говоришь. Я так и решил.
Проблема в том что я не понимаю почему пременная NULL не существует?isset
 
это не С. Если переменная глобальная
key_exists('var', $GLOBALS)

если нет, то
1) неопределенная переменная это всегда null, false.

переменная вернет любой тип взависимости от контекста применения
Код:
$var= null;

echo 'переменная была раньше<br/>';
[b]var_dump(key_exists('var', $GLOBALS));[/b] // переменная была раньше

unset($var);
echo 'больше нет<br/>';
[b]var_dump(key_exists('var', $GLOBALS)); // больше нет[/b]

function test()
{
    $var = null;
    echo '$var = null;<br/>';
    var_dump($var);
    
    if (!isset($var)) {
        echo '$var = не существует  ;<br/>';
    }
    if (empty($var)) {
        echo '$var = не существует  ;<br/>';
    }
    
    $var = '';
    echo '$var = "";<br/>';
    var_dump($var);
    
    if (isset($var)) {
        echo '$var =   существует ;<br/>';
    }
    if (empty($var)) {
        echo '$var = пустая   ;<br/>';
    }
    
    if (empty($var1)) {
        echo '$var1 = пустая   ;<br/>';
        echo $var1; // на самом деле нету
    }
    unset($var);
    if (empty($var)) {
        echo '$var = пустая   ;<br/>';
        echo $var; на самом деле нету
    }
}
test();
так что годится только isset или key_exists в случае с глобальной переменной
 
а чем может помочь is_null?
Код:
$ php -r '$a = null; var_dump(is_null($a), @is_null($b));'
bool(true)
bool(true)

[m]get_defined_vars[/m]
только нафига эти все выкрутасы нужны?
 
Проблема в том что я не понимаю почему пременная NULL не существует?
потому, что NULL - это "ничто".
помидитируй над результатом следующего кода:
Код:
$a= 1;
unset($a);
echo is_null($a);
 
null это не ничто, это тип данных. заведомо пустых.
Код:
$a= 1;
unset($a);
echo is_null($a);
тут и нуля уже нет

Frol теория наверно, key_exists('var', $GLOBALS) вместо get_defined_vars
 
надо проверить какая же их этих 2 ситуаций у нас.
эээ.. че ж такое он интересное делает, что не делал ни один из ответивших здесь?
 
еще for fun:
PHP:
$i = null;
$i++;
var_dump($i); // int(1)

$j = null;
$j--;
var_dump($j); // NULL

ustas
у Вас все переменные в программах находятся в $GLOBALS? :)
 
dark-demon
вообще-то, опять же по определению из мануала - null это специальный тип данных
 
There is only one value of type NULL, and that is the case-insensitive keyword NULL.
собственно и мануал озвучивает его до этого как:

And finally two special types:

* resource
* NULL
 
тему короче разжевали, вывод. обьявлять заранее, если что то узнать в локальной видимости - ставить флаг, или массив переменных типа $var['one']='';
может правда есть недокументированная функция, надо покапать. Разработчики там вечно кучу всего оставляют.
 
type NULL - переводится как "никакой тип". это такая же условность, как и "пустое множество" или "ноль штук".
 
dark-demon
'type NULL' переводится как тип NULL. Верхним регистром не для красоты выделяют.
ps: в русской версии разжевали кажется для понимания. Тем не менее описание NULL находится в разделе Типы и "Существует только одно значение типа NULL"
 
type NULL' переводится как тип NULL.
тип "ничто", коли уж быть точными. что может иметь тип "ничто"? правильно, "ничто".

Верхним регистром не для красоты выделяют.
а для чего же ещё? оно, если ты не знал, регистронезависимо.
 
dark-demon
а для чего же ещё?
Вообще-то чтобы эти слова не переводили :)

а для чего же ещё? оно, если ты не знал, регистронезависимо.
эх.. Проще говоря: "type NULL - переводится как "никакой тип" == false Переводится на русский как тип "ничто" (раз так хочешь)

что может иметь тип "ничто"? правильно, "ничто".
Конечно. Но зачем ты об этом написал?
 
Может так?
PHP:
if (array_key_exists('var', $_GLOBALS))
{
  echo 'The $var variable exists';
}

%)

-~{}~ 04.06.07 02:22:

З.Ы. Не проверял )
 
Сверху