Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > bool is_null ()


Автор: overmetallist 24.8.2010, 21:45
Так работает: smile в чем причина?
Код

$eee=NULL;
echo is_null($eee);

так нет: smile 
Код

bool $eee=NULL;
echo is_null($eee);

так нет: smile 
Код

var $eee=NULL;
echo is_null((bool)$eee);

Автор: enoff 24.8.2010, 22:16
is_null() проверяет, является ли переменная типом null.
вы приводите переменную к булеву типу и спрашиваете, почему она больше не null?

Автор: overmetallist 24.8.2010, 22:21
Цитата

is_null() проверяет, является ли переменная типом null.
вы приводите переменную к булеву типу и спрашиваете, почему она больше не null? 

Специальное значение NULL говорит о том, что эта переменная не имеет значения. NULL - это единственно возможное значение типа NULL.
Переменная считается NULL если 
ей была присвоена константа NULL.  ??????? smile 
Код

var $eee=NULL;
echo is_null($eee);//error

ей еще не было присвоено какое-либо значение. 
она была удалена с помощью unset().

оказывается:
Код

var $eee=NULL;\\ так делать нельзя

$eee=NULL;\\делаем так
unset($eee);\\или делаем так


Автор: enoff 24.8.2010, 22:36
Код

var $eee=NULL;  // var?
echo is_null($eee);
 ?
в первом посте было bool $eee, потому  is_null() возвращало false.

Автор: overmetallist 24.8.2010, 22:37
Цитата

 is_null() возвращало false.


 is_null() возвращало "ничего"на станице, тобешь false, но должно было то true smile 
я же присвоил переменной пустую переменную...

Код

var $eee=NULL;  // var?
echo is_null($eee);

Автор: gta4kv 25.8.2010, 13:27
var?

Вы вообще понимаете в чем вопрос заключается?

Автор: overmetallist 25.8.2010, 13:30
че var? , я же делаю согласно инструкции, присваиваю NULL, должно равняться NULL smile 

Автор: gta4kv 25.8.2010, 13:32
Код

<?php

$var = null;
var_dump( is_null( $var ) );

?>



Цитата

bool(true)


Что не так?

Автор: overmetallist 25.8.2010, 13:34
так попробуй
Код

<?php
var $var = null;
var_dump( is_null( $var ) );
?>

Автор: gta4kv 25.8.2010, 13:36
Какой к чертям var? Вы издеваетесь?
Единственное что сделает ваш код, так это выдаст ошибку.

Автор: overmetallist 25.8.2010, 13:41
а почему бы не var? это код пхп и поидее он должен работать, но не работает smile 

Автор: gta4kv 25.8.2010, 13:42
Он не должен работать.

Добавлено @ 13:43
http://stackoverflow.com/questions/1206105/what-does-php-keyword-var-do

Автор: overmetallist 25.8.2010, 14:50
там написано  It will work in PHP5, тобешь все должно работать smile 
Код

It's for declaring class member variables in PHP4, and is no longer needed. It will work in PHP5,
 but will raise an E_STRICT warning in PHP5 up to version 5.3, as of which it has been deprecated. Example usage
class foo {
    var $x = 'y';
    function bar() {
    }
}

Автор: bars80080 25.8.2010, 14:59
Цитата(overmetallist @  25.8.2010,  14:50 Найти цитируемый пост)
там написано  It will work in PHP5, тобешь все должно работать

но вы же видите, что там var используется для объявления свойства в классе, а не прямо в коде

Автор: overmetallist 25.8.2010, 15:06
но это же должно работать, так как я присваиваю пустую переменную, в любом другом языке программирования работало бы, ну в C++ уверен smile 
Код

var $eee=NULL;
echo is_null($eee);


Код

TYPE *foo = new TYPE();
//использование foo
delete foo;// foo != NULL
foo = NULL;// foo == NULL
//еще 100 строк кода
delete foo;//ошибки нет: delete проверяет значение foo

Автор: bars80080 25.8.2010, 15:20
Цитата(overmetallist @  25.8.2010,  15:06 Найти цитируемый пост)
в любом другом языке программирования работало бы, ну в C++ уверен

а где в этом примере с C++ используется var?

Автор: overmetallist 25.8.2010, 16:06
работает коректно:
Код

float aaa=NULL;
if(aaa!=NULL){...}

это нет smile 
Код

var $eee=NULL;
echo is_null($eee);

Автор: bars80080 25.8.2010, 16:14
Цитата(overmetallist @  25.8.2010,  16:06 Найти цитируемый пост)
float aaa=NULL;
if(aaa!=NULL){...}

где в этом примере для C++ используется var?

Автор: gta4kv 25.8.2010, 17:17
Цитата(overmetallist @ 25.8.2010,  16:06)
Код

float aaa=NULL;
if(aaa!=NULL){...}


Из этого примера в PHP вырисовывается такой код:
Код

<?php
(float) $var = null;
if( $var == null )
{
    echo 'I am null.';
}
?>


и он работает.

Автор: overmetallist 25.8.2010, 18:07
ладно так: smile 
Код

bool aaa=NULL;
if(aaa==NULL){...}//условие будет истина(true)


Код

bool $aaa=NULL;
if(is_null($aaa)){...}//условие будет ложь(false), так как bool


Код

<?php
$aaa=NULL;
echo is_null((bool)$aaa); так тоже false
?>

Автор: gta4kv 25.8.2010, 18:18
Начнем с того, что наверное не стоит сравнивать два разных языка, не?

И как понимаю для тебя основы программирование это тоже что-то новое.

ты преобразуешь переменную в boolean и проверяешь null ли она, но у boolean переменной может быть только два значения true или false. Никаких null.

твой пример
Код

bool aaa=NULL;

объявляет переменную.


Код

is_null((bool)$aaa)

это же её преобразует.

Автор: overmetallist 25.8.2010, 18:20
вот: smile 
Код

<?php
$aaa=NULL;
if ((bool)$aaa==NULL){ echo "1";}\\ так true
?>


Код

<?php
$aaa=NULL;
if (is_null((bool)$aaa)){ echo "1";}\\ так false
?>


вот, дважды преобразуя в bool при одних и тех же условиях разные результаты smile

Добавлено через 11 минут и 19 секунд
только не говорите что я не прав, проверял на хостинге и на компе, is_null отлично работает от if(..==NULL) в некоторых случаях

Автор: gta4kv 25.8.2010, 18:38
Серьезно не видишь разницы между
Код

(bool)$aaa==NULL

и
Код

is_null((bool)$aaa)

?

Автор: overmetallist 25.8.2010, 18:46
там и там если равно NULL smile 

Автор: gta4kv 25.8.2010, 18:49
Цитирую
Цитата(gta4kv)

ты преобразуешь переменную в boolean и проверяешь null ли она, но у boolean переменной может быть только два значения true или false. Никаких null.

Автор: overmetallist 25.8.2010, 18:50
Цитата

ты преобразуешь переменную в boolean и проверяешь null ли она, но у boolean переменной может быть только два значения true или false. Никаких null.

Код

(bool)$aaa==NULL 

- но в этом случае появлется третее значение smile 

Автор: gta4kv 25.8.2010, 18:51
Перечитай мое сообщение еще 99999999 раз. Подумай головой, а потом еще перечитай.

Автор: overmetallist 25.8.2010, 18:55
а говорю что так, потому что оно так и есть  smile 
Код

((bool)$aaa==NULL)==true 


Код

(is_null((bool)$aaa))==false


Добавлено через 7 минут и 37 секунд
кто может пояснить почему именно так происходит? smile 

Автор: Ипатьев 25.8.2010, 19:04
Цитата(overmetallist @  25.8.2010,  18:46 Найти цитируемый пост)
там и там если равно NULL 

Вообще-то оба эти выражения (и is_null(), и ==)возвращают булев результат, а никак не NULL
Цитата(overmetallist @  25.8.2010,  18:20 Найти цитируемый пост)
if ((bool)$aaa==NULL){ echo "1";}\\ так true

Код

if ((bool)$aaa===NULL) echo "1"; // а так нет

Автор: overmetallist 25.8.2010, 19:13
Цитата

Вообще-то оба эти выражения (и is_null(), и ==)возвращают булев результат, а никак не NULL


а почему тогда у меня выводит 1? smile 
Код

if ((bool)$aaa==NULL){ echo "1";}\\ так true

Автор: gta4kv 25.8.2010, 19:22
http://php.su/learnphp/datatypes/?boolean

Автор: Nigel 25.8.2010, 19:24
overmetallist, RTFM.
2 страницы одной и той же ерунды..
уже 3 ((

Автор: Ипатьев 25.8.2010, 19:25
это никак моим словам не противоречит.
результат выполнения оператора == в данном примере - TRUE, имеет булев тип.
а почему выводит 1 - потому что оператор == для данного исследования вообще не годится. Какой надо использовать вместо него - я написал выше.
Хотя, честно говоря, я не понимаю, что тут исследовать - все давно разъяснено на первой странице.
Надо только не путаться в операторах и типах переменных.


Автор: overmetallist 25.8.2010, 19:28
такой не подходит, а я его часто встречаю вот здесь google.com/codesearch , как и is_null
Код

if ((bool)$aaa==NULL){ echo "1";}\\ так true

Автор: Ипатьев 25.8.2010, 19:30
Я часто встречаю молоток в ящике с инструментами.
Но если мне надо склеить два листа бумаги, то он мне не подходит. 
Для данного исследования оператор == не подходит. Сколько бы он ни встречался в разных прочих кодах.

Автор: overmetallist 25.8.2010, 19:34
выводит bool(false); smile 
Код

$aaa=NULL;
var_dump((bool) (is_null((bool)$aaa)));


Код

var_dump((bool) (bool)Null); //bool(false)
var_dump((bool) "false");   // bool(true)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)

Автор: Ипатьев 25.8.2010, 19:39
Что же в этом удивительного? 
какой еще результат можно ожидать от применения оператора (bool), если единственным его предназначением является приведение переменной к булеву типу?
Об этом на первой странице все и говорили.

Автор: overmetallist 25.8.2010, 19:45
ну это уже на грани моего понимания smile 
Код

$aaa=NULL;
var_dump((bool) (is_null((bool)$aaa)));  //bool(false)

Код

$aaa=NULL;
var_dump((bool) ((bool)$aaa==NULL)); //bool(true) 

Автор: Ипатьев 25.8.2010, 19:51
Мне кажется, вы неспособны воспринимать, что вам пишут. 
я уже писал, результат работы операторов is_null() и == не нужно насильно приводить к булевому типу - он и так уже булев.
поэтому первый (bool) в этих примерах не нужен. (зачем там второй - тоже загадка, но это другой вопрос)
я уже писал, что оператор == для задачи, где важен тип переменной, применять нельзя. 
а вы все равно упорно его пишете. зачем? чтобы заполнить еще десяток страниц в этом топике?

Автор: gta4kv 25.8.2010, 19:52
посты overmetallist все умнее и умнее становятся.  smile 

Автор: overmetallist 25.8.2010, 20:02
согласен, так будет true в обоих результатах, если убрать bool как в прошлом случае
Код

<?php
$aaa=NULL;
var_dump((bool) (is_null($aaa)));
$aaa=NULL;
var_dump((bool) ($aaa==NULL)); 
?>


но это мне не понятно smile 
Код

$aaa=NULL;
(is_null((bool)$aaa))==false
((bool)$aaa==NULL)==true 


Код

Nulls are almost the same as unset variables and it is hard to tell the difference without creating errors from the interpreter:

<?php
$var = NULL;
?>

isset($var) is FALSE
empty($var) is TRUE
is_null($var) is TRUE

isset($novar) is FALSE
empty($novar) is TRUE
is_null($novar) gives an Undefined variable error

$var IS in the symbol table (from get_defined_vars())
$var CAN be used as an argument or an expression. 

Автор: Ипатьев 25.8.2010, 20:11
Что именно непонятно, лучше написать словами.
Потому что из кода этого не видно.
в каждом примере вы пишете все больше и больше операторов, не разобравшись при этом даже с предыдущими.

какая стоит задача? Узнать, имеет ли ли переменная $aaa значение NULL?

Код

$aaa=NULL;
if (is_null($aaa)) echo 1;

все, больше ничего не надо. ни (bool), ни ==, ни других замысловатых конструкций.

Автор: overmetallist 25.8.2010, 20:17
вот в чем дело, спасибо всем, разобрался
Код

it is hard to tell the difference without creating errors from the interpreter:
is_null($novar); gives an Undefined variable error
(is_null((bool)$aaa))==false;

постараюсь smile 
Цитата

все, больше ничего не надо. ни (bool), ни ==, ни других замысловатых конструкций. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)