За последние 24 часа нас посетили 18283 программиста и 1817 роботов. Сейчас ищут 925 программистов ...

isset и is_null - какая разница?

Тема в разделе "PHP для новичков", создана пользователем Ruzzz, 20 фев 2008.

Статус темы:
Закрыта.
  1. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    как я понял отсюда http://www.blueshoes.org/en/developer/php_cheat_sheet/ - это просто обратные функции?
    т.е. isset = !is_null
    или есть еще отличия? и можна ли место if (isset($_POST['ID']) делать так if (!is_null($_POST['ID'])?
     
  2. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    is_null вроде как нотис должен генерировать.
     
  3. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    а что такое нотис?

    Добавил :)
    Я понял что такое нотис :)
     
  4. Anonymous

    Anonymous Guest

    Да.
     
  5. Anonymous

    Anonymous Guest

    Проверяется легко:
    PHP:
    1. <?php
    2. echo '<br/>$var is not exist; isset $var = ',(isset($var)?'true':'false'),'; is_null($var) = ',(is_null($var)?'true':'false');
    3. $var = NULL;
    4. echo '<br/>$var is NULL; isset $var = ',(isset($var)?'true':'false'),'; is_null($var) = ',(is_null($var)?'true':'false');
    5. $var = '1';
    6. echo '<br/>$var has value of 1; isset $var = ',(isset($var)?'true':'false'),'; is_null($var) = ',(is_null($var)?'true':'false');
    7. ?>
    ЗЫ. Да, этот код несколько извращен. Ну во так.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    is_null проверяет, что переменная ничего не содержит(null), isset проверяет, что переменная существует и что-то содержит.
     
  7. Anonymous

    Anonymous Guest

    ЗЗЫ. У isset() есть одна нифиговая фича, про которую почему то мало кто знает. С ним можно сделать так:
    PHP:
    1. <?php if(isset($var, $var2, $var3)) { ... } ?>
     
  8. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    гы, я как-то попался на этом =)

    p.s. Всмысле на NULL, isset и unset
     
  9. Anonymous

    Anonymous Guest

    Дык, если б я не попадался, я б этого и не знал бы ;)
     
  10. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Sergey89
    а техническим языком(ну или языком PHP) можна как-то показать, то что вы сказали? Я просто вас понял, но не могу понять как это для PHP
     
  11. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    вот я использую isset($_POST['ID']), а как мне проверит если я передаю $_POST['ID'] в функцию? Как проверить в функции что-то что оно isset()? передвать ссылку на $_POST
     
  12. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    PHP:
    1.  
    2. <?php
    3. function test ($var) {
    4.  if ( isset ($var) )
    5.   return ('The variable is set');
    6.  else
    7.   return ('The variable is not set');
    8. }
    9.  
    10. echo test ($_POST['ID']);
    11. ?>
    12.  
     
  13. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Professor Понял спасибо! :) Плин вроде элементарные вещи, но иногда меня на фоне ==, === и null - глючит :(

    скажите а если так:

    PHP:
    1.  
    2.  <?php
    3.  function test ($var) {
    4.   if ( isset ($var) )
    5.    return ('The variable is set');
    6.   else
    7.    return ('The variable is not set');
    8.  }
    9.  
    10.   $var = $_POST['ID'];
    11.   echo test ($var);
    12.  ?>
    13.  
    при этом $_POST['ID'] не определен, т.е isset ($_POST['ID']) - вернет false, то как я понимаю после $var = $_POST['ID']; станет $var = NULL, и тогда isset ($var) = false? или я не прав?
     
  14. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Вот хоть убейте меня, но я не понимаю таких вопросов. А что, заподло самому запустить этот код и посмотреть, что он тебе скажет? Или обязательно нужно, чтобы кто-то подал соску и подержал бутылочку?

    Пардон. У меня тут младшему 4,5 месяца, ассоциации - соответственные.
     
  15. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
  16. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    И не поймешь. Чтобы понять, нужно этот вопрос не в php осваивать, а на каком-нибудь C++/Delphi.
    Там это намного очевиднее и понятнее сделано (когда разберёшься :) ). А на php все эти вещи сделаны прозрачными для пользователя и трудно поддающимеся вычислению "как оно работает". Если ты начал изучение програмирования с php - моя личная рекомендация - не пытайся это понять - либо запутаешься, либо придёшь к кривым выводам, которые будут мучать тебя потом всю жизнь.
    Лучше прочти, что такое в Сях null-terminated string, ANSI string и что такое массив Char и чем все эти вещи отличаются. Вот в php эти все три вещи выглядят и работают абсолютно одинаково. А в Сях в них есть принципиальная разница.
     
  17. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Я хорошо программирую в сях и Delphi, более того на асме, ну может не хорошо, я скромный, но думаю я далеко не новичок в этих вопросах :). И от того что я знаю что такое null-terminated string, ANSI string и что такое массив Char - у меня часто и возникают вопросы в PHP. Где много неоднозначностей для меня. Хотя мой мозг пытается все четко расставить по полочкам :)

    Для меня было бы ясней если бы я знал как в мнемонике асма работают isset и is_null :), если они отличаются не только своей обратностью, или было бы ясней если оставили что-то одно! :)
     
  18. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    В асме не расскажу.
    А в сях, дельфях - всё очень просто.
    Объявленная переменная всегда даст - isset()===true, но не всегда даст is_null()===true; потому что уже может иметь значение, отличное от null.
    А вообще - открываешь доку и читаешь:
    isset -- Determine whether a variable is set - Returns TRUE if var exists; FALSE otherwise.
    is_null -- Finds whether a variable is NULL - Returns TRUE if var is null, FALSE otherwise.
    Что тут непонятного-то?
     
  19. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    А в этом примере:
    Переменная $_POST['step'] у нас НЕ void, а она вообще не объявлена. И вот эта попытка присвоения $step = $_POST['step']; - будет объявлять переменную $step значением void, на php'шном понятии - null.
    а вот isset(void) будет как раз false.
    Кажется так. Что-то я сам запутался.
    Ау, старшие товарищи! Правильно я написал или нет?
     
  20. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    да все понятно, ну да ладно :)

    ну дальше уже флуд наверно )

    в какой ситуации смогу воспользоваться только одной из этих функций, но вторая при этом помоч не сможет? По своей сути isset() = !is_null(). Вот я и был в замешательстве, зачем две функции если null и был придуман для того чтобы показать "нет значения" а тут получается добавили еще одно состояние(существует ли переменная), но на практике это лишь еще одно название для null. Вот поэтому думаю такое "скрытие" от программиста внутренностей лишь создает проблемы в понимании.

    Вот выше Sergey89 сказал
    и я как новичок подумал, что ведь так и есть :) но потом подумал а какая разница? какая разница между "существует и имеет значение NULL" и "не существует" на практике? кто-то может сказать? Или скажите мне что никакой и я все равно не успокоюсь, пока мне не ответят зачем тогда разработчики ввели их две? :) Сорри
     
  21. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я это понял только тогда, когда стал подробнее изучать javascript (а понял ли?)))).
    Там, если не существует переменной, то она undefined. Так же и тут, в РНР - если переменной не существует, то isset($var) === false и выпадет нотис, если переменная где-то в дальнейшем используется без блока проверки. Если она существует (объявлена (в php - global $var;, в javascript - var omg;)), то в php она будет null, а в javascript по-прежнему undefined.
     
  22. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Что-то ты меня тоже озадачил. Может быть это как раз разница между:
    var x: int;
    x:=NULL;

    и тем, что она
    var x: void?
     
  23. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    парни? вы че паритесь-то?

    скока пишу на php как-то с таким мозговым штурмом не сталкивался.

    оно вам надо?

    =)
     
  24. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ноль - это ведь тоже значение. Значение переменной. Но его нет, если нет самой переменной.

    440Hz
    Не мешай людям сны смотреть :lol:
     
  25. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    причем замете в языках си и паскаль, я перкрасно понимаю разницу между не обьявлена и null, но в PHP для меня это все размазано, потому как тут все настолько "типоприводимо", и самого понятия "Обьявлена" нет, что я не пойму зачем эта разница здесь?

    Kreker как я понял в php global, это не обьявление переменной в том смысле в котором говоришь ты, это просто говорит PHP ссылаться на переменную с таким именем "выше" локальной области видимости функции
     
Статус темы:
Закрыта.