За последние 24 часа нас посетили 32943 программиста и 1756 роботов. Сейчас ищут 829 программистов ...

Почему так странно работает isset?

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

  1. koopakaru

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

    С нами с:
    12 мар 2008
    Сообщения:
    64
    Симпатии:
    0
    Адрес:
    Прибалтика
    Написала небольшой скрипт который должен находить в тексте (...) и после выводить сообщение о том есть ли оно в тексте или нет. Вариант вывода через isset не прокатил. Просьба обьяснить почему???
    Вот так код работает:
    Код (Text):
    1. <?
    2. for ($i=0;$i<=$cmn;$i++)
    3.    {
    4.    $full_description = $news[$i]['text_'.$s_lang];
    5.    $space_pos = strpos($full_description, '(...)', 1);
    6.    if($space_pos==null)
    7.    {
    8. echo "korotko";
    9. }
    10. else
    11. {
    12.  
    13. echo "dlinno";
    14. echo $space_pos;
    15. }
    16. }
    17. ?>
    А вот так нет. Но ведь это в прниципе одно и тоже?
    Код (Text):
    1. <?
    2. for ($i=0;$i<=$cmn;$i++)
    3.    {
    4.    $full_description = $news[$i]['text_'.$s_lang];
    5.    $space_pos = strpos($full_description, '(...)', 1);
    6.    if(isset($space_pos))
    7.    {
    8. echo "korotko";
    9. }
    10. else
    11. {
    12.  
    13. echo "dlinno";
    14. echo $space_pos;
    15. }
    16. }
    17. ?>
     
  2. Anonymous

    Anonymous Guest

    Нет.
    В твоем случае нужно вообще
    Именно так, и только так. Почему - написано в мануале по strpos
     
  3. koopakaru

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

    С нами с:
    12 мар 2008
    Сообщения:
    64
    Симпатии:
    0
    Адрес:
    Прибалтика
    ТОгда совершенно логичен вопрос. А почему у меня работает первый вариант, причем абсолютно корректно..
     
  4. Anonymous

    Anonymous Guest

    Он работает корректно в большинстве случаев.. кроме как минимум, одного. Если тебе встретится (...) сразу же.
     
  5. koopakaru

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

    С нами с:
    12 мар 2008
    Сообщения:
    64
    Симпатии:
    0
    Адрес:
    Прибалтика
    Как ни странно, но в этом случае он тоже отлично работает... Работает верно...Можете сами проверить, если не верите... В том числе и когда встречается (...)
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    koopakaru
    Используйте isset только для проверки существования переменной (собственно по назначению) и проблем не будет.

    В случае strpos сравнивайте с === false, как это заявлено в мануале.
     
  7. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    У тебя стоит offset = 1. Поэтому работает. Убери оффсет и задай текст, в котором искать
    PHP:
    1. $full_description = '(...)blahblahblah';
    Увидишь, что если у тебя будет условие
    PHP:
    1. if($space_pos==null)
    (хотя правильно не null, а false) - то он всё равно тебе скажет, как-будто он не нашёл подстроку.. Хотя на самом деле он нашёл, просто позиция = 0, а это равнозначно == false. Поэтому нужно писать === false. Тогда не будет путанницы.
     
  8. koopakaru

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

    С нами с:
    12 мар 2008
    Сообщения:
    64
    Симпатии:
    0
    Адрес:
    Прибалтика
    Johnatan

    Спасибо, теперь все очень даже понятно и логично.