Как задать что переменная неопределена?

Статус
В этой теме нельзя размещать новые ответы.

HraKK

Мудак
Команда форума
Специально для индусов есть команда is_null
isset( $a) || is_null($a)
 

kstati

Новичок
Специально для антииндусов.
PHP:
<? 
$a = NULL ;

echo  (isset( $b) || is_null($b)  ) ?  "O" : "U";
?>
Посмотри-ка, объявляю $a, проверяю $b
А в результате?

is_null криво работает с неопределенными переменными -- все неопределенные переменные приравнивает к нул.

И ошибки здесь нет (с точки зрения авторов) NULL === ( логически ) неизвестное значение.
А известно ли значение неопределенной переменной? нет. По этому из_нул(неопределенная_переменная) === тру.

Далее смотрим, для оптимизации (уж так положено), если первый параметр "||" является истиной, то второй не проверяется. Что выходит в результате? Если переменная определена - то возвращаем тру. иначе, коль она не определена (либо isset ее забраковал) она может быть неопределенной либо нулом. а и то и другое для функции is_null == true.
В результате = вечный true

проверь ка такой код:
PHP:
echo  (isset( $ПоФихЧто) || is_null($ПоФихЧто)  ) ? " true" : "false";
он равнозначен коду
PHP:
 echo true||false ? " true" : "false";
// либо
echo false||true ? " true" : "false";
// либо
echo true||true ? " true" : "false";
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
эх ... просто это поколение программистов, которых не учили всегда определять переменные перед использованием
 

kstati

Новичок
grigori
Ой, да ладно )
Это поколение, работающее с тремя состояниями - истина-ложь-хренЕгоЗнает
Открой любой учебник по SQL. Именно учебник, а не фигню. И убедишься, что нул, часто имеет право на жизнь.
По сути это (имхо) -- неизвестные данные, которые пользователю нужно уточнить в будущем, но работа системы продолжается без сбоев.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
kstati
просто надо знать, что NULL - это значение, которое присваивается неопределенной переменной при первом обращении к ней
 

kstati

Новичок
нет, ты абсолютно не прав.
Пример.
Таблица (абстрагируемся от понятий, главное идея)
Фамилия - имя - отчество - адрес

Мне (человеку) сказали. А внеси-ка адрес Иванова Ивана Ивановича.

Я его не знаю заранее.
Я вношу в свой журнал работы -- Иванов-Иван-Иванович-УТОЧНИТЬ

И... работаю -- уточняю, или посылать шефа на?

Это лишь один из примеров.

Нул === (неполные===неточные===требуется уточнить) данные

Погугли на тему "нечеткая логика".
 

fixxxer

К.О.
Партнер клуба
~$ php -r 'var_dump( isset( $a) || is_null($a) );'

Notice: Undefined variable: a in Command line code on line 1
bool(true)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: kstati
grigori
Это поколение, работающее с тремя состояниями - истина-ложь-хренЕгоЗнает
Ошибка. Null - не третий вариант значения булевского типа.
PHP- не бестиповый язык, а NULL - просто тип данных, как int и string, и просто значение переменной :)

Открой любой учебник по SQL.
Тогда тебе сюда: http://sql.ru/ или http://phpclub.ru/talk/forumdisplay.php?forumid=39
PHP - не SQL.
И убедишься, что нул, часто имеет право на жизнь.
кажется, тебя глючит ...
может, лучше обсудить, есть ли жизнь после смерти?

По сути это (имхо) -- неизвестные данные, которые пользователю нужно уточнить в будущем, но работа системы продолжается без сбоев.
NULL - это просто значение переменной, никакого тайного смысла и символизма.

-~{}~ 27.11.08 00:12:

>Пример. Таблица (абстрагируемся от понятий, главное идея)

Еще раз, с SQL, таблицами и т.п. - в другую ветку!
Конкретно в PHP NULL - это просто значение.
 

fixxxer

К.О.
Партнер клуба
товарищи индусы! внимание!

PHP:
@trigger_error("");
if (@is_null($a)) {
    if (current(error_get_last()) == 8) {
        echo "is not set\n";
    } else {
        echo "is null\n";
    }
} else {
    echo "isset and is not null\n";
}
 

kstati

Новичок
grigori
не надо жести ) ты не прав, либо не доказал правоту.
NULL -- неопределенное значение.
и точка.

В этом и разница от нуля.
например, undefined в javascript == null. А в C/C++ null актуален только в нулевых указателях.

То, что PHP безтиповый язык не может быть преградой понятию "значение не определено". Именно этим значением и является структура (удивишься, но факт - полазь по исходникам оного) NULL

... Тогда тебе сюда...
Ни надо -- уже ) я-то и так понимаю что пишу, беда в том, что понятно описать не могу -- только пытаюсь )

Нет, не стоит обсуждать о жизни после смерти.

И не надо еще раз в SQL. Примеры на то и примеры, чтобы на них смотрели и понимали идею, а не реализацию.

---------
По сути. NULL - это да-да-да, тип данных, который используется в случае, если невозможно использовать другой тип данных, значит не достоверно известно ибо тип NULL может принимать лишь одно значение.

Ну, как, например объяснить, есть что-то (основные типы) и есть нечто (это что-то, но еще не понятно что именно == тип NULL).


Выполни-ка код:
PHP:
<? 
echo "a ";
echo NULL && true;
echo "\nb ";
echo NULL || true;
echo "\nc ";
echo true || NULL;
?>
Убедишься, что NULL относится как раз-таки к нечеткой логике.
ибо ответом будет:
a
b 1
c 1

Т.е. в "строке" а (булево и) будет пустота. почему?
А фиг его знает, что есть NULL то ли истина, то ли ложь -- не известно.
В отличие от булевых (или), где вторая переменная не имеет значения -- важна "хоть одна из них".

В том числе, например, вспомни математику.
Чему равно выражение 12/0 ? нельзя делить?? значит === NULL
значение определено? Да. оно == 12/0.
Значение известно - нет -- оно не допустимо.


2fixxxer и кто из нас больший индус ))
писать надо так, чтобы было удобно и понятно в первую очередь. )
Да, ты прав, но запутал ))
 

kstati

Новичок
Блиин, ну ё-маё, сказал же читайте вдумчиво.
От инудосов (типа вякающих) и следа бы не осталось.))
Даже тупо запустивших код, предоставленный десятком постов выше. ))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
kstati
мы здесь не спорим - мы рассказываем, как правильно.
Таки да, знаем, как правильно.

>echo NULL && true;
Ты не учел приведение данных : var_dump(null && null);
Оператор && приводит NULL к boolean и становится false.
PHP _НЕ_БЕСТИПОВЫЙ_ язык.

Чувствую, надо закрывать, влом комментировать чушь сверхактивного kstati.
 

fixxxer

К.О.
Партнер клуба
kstati
а вот не надо. все приведенные до моего варианты либо не позволяют ничего узнать для переменной, локальной в функции или переменной класса, либо генерят notice-ы. :)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху