isset при NULL

T. Anre

Новичок
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();
}
?>
 

HraKK

Мудак
Команда форума
itprog
Читай внимательно, все верно ты говоришь. Я так и решил.
Проблема в том что я не понимаю почему пременная NULL не существует?isset
 

ustas

Элекомист №1
это не С. Если переменная глобальная
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 в случае с глобальной переменной
 

Frol

Новичок
а чем может помочь is_null?
Код:
$ php -r '$a = null; var_dump(is_null($a), @is_null($b));'
bool(true)
bool(true)
[m]get_defined_vars[/m]
только нафига эти все выкрутасы нужны?
 

dark-demon

d(^-^)b
Проблема в том что я не понимаю почему пременная NULL не существует?
потому, что NULL - это "ничто".
помидитируй над результатом следующего кода:
Код:
$a= 1;
unset($a);
echo is_null($a);
 

ustas

Элекомист №1
null это не ничто, это тип данных. заведомо пустых.
Код:
$a= 1;
unset($a);
echo is_null($a);
тут и нуля уже нет

Frol теория наверно, key_exists('var', $GLOBALS) вместо get_defined_vars
 

Андрейка

Senior pomidor developer
надо проверить какая же их этих 2 ситуаций у нас.
эээ.. че ж такое он интересное делает, что не делал ни один из ответивших здесь?
 

Crazy

Developer
Автор оригинала: Unkind
Интересно, причем тут локальные переменные? Мы вроде о подпрограммах не говорили.
В первом посте нигде нет слова "глобальные".
 

Wicked

Новичок
еще for fun:
PHP:
$i = null;
$i++;
var_dump($i); // int(1)

$j = null;
$j--;
var_dump($j); // NULL
ustas
у Вас все переменные в программах находятся в $GLOBALS? :)
 

zerkms

TDD infected
Команда форума
dark-demon
вообще-то, опять же по определению из мануала - null это специальный тип данных
 

zerkms

TDD infected
Команда форума
There is only one value of type NULL, and that is the case-insensitive keyword NULL.
собственно и мануал озвучивает его до этого как:

And finally two special types:

* resource
* NULL
 

ustas

Элекомист №1
тему короче разжевали, вывод. обьявлять заранее, если что то узнать в локальной видимости - ставить флаг, или массив переменных типа $var['one']='';
может правда есть недокументированная функция, надо покапать. Разработчики там вечно кучу всего оставляют.
 

dark-demon

d(^-^)b
type NULL - переводится как "никакой тип". это такая же условность, как и "пустое множество" или "ноль штук".
 

itprog

Cruftsman
dark-demon
'type NULL' переводится как тип NULL. Верхним регистром не для красоты выделяют.
ps: в русской версии разжевали кажется для понимания. Тем не менее описание NULL находится в разделе Типы и "Существует только одно значение типа NULL"
 

dark-demon

d(^-^)b
type NULL' переводится как тип NULL.
тип "ничто", коли уж быть точными. что может иметь тип "ничто"? правильно, "ничто".

Верхним регистром не для красоты выделяют.
а для чего же ещё? оно, если ты не знал, регистронезависимо.
 

itprog

Cruftsman
dark-demon
а для чего же ещё?
Вообще-то чтобы эти слова не переводили :)

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

что может иметь тип "ничто"? правильно, "ничто".
Конечно. Но зачем ты об этом написал?
 

Krishna

Продался Java
Может так?
PHP:
if (array_key_exists('var', $_GLOBALS))
{
  echo 'The $var variable exists';
}
%)

-~{}~ 04.06.07 02:22:

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