За последние 24 часа нас посетили 35312 программистов и 1814 роботов. Сейчас ищут 788 программистов ...

Нестыковка с документацией php при проверки переменной?

Тема в разделе "PHP для новичков", создана пользователем php_user, 4 май 2014.

  1. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Делаю тестовую страницу с таким кодом
    Код (PHP):
    1. <?php
    2. if (isset($_GET['aaa']))
    3. {echo 'true- Существует- isset <br /> ';}
    4. else
    5. {echo 'false- Не существует- isset <br />';}
    6.  
    7. if (empty($_GET['aaa']))
    8. {echo 'true- Пустая- empty <br />';}
    9. else
    10. {echo 'false- Не пустая- empty <br />';}
    11. ?>
    Далее для перехода на страницу пишу в адресной строке: .../yyy.php?aaa='"" (это две двойные кавычки без пробела)
    страницы выводит
    но тутТаблица сравнения типов в PHP написано:

    а у меня
    а если ввести .../yyy.php?aaa=null, то вообще все наоборот (empty() и isset() показывают не то что в таблице на сайте

    У меня:
    Как это понимать???
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну так все верно же. $_GET['aaa'] равна двум кавычкам без пробела, а когда передаете null, то 'null'.

    Код (PHP):
    1. $empty = "";
    2. $null = null;
    3.  
    4. if (isset($empty)) {
    5.     echo '$empty существует <br>';
    6. }
    7. if (empty($empty)) {
    8.     echo '$empty пуста <br>';
    9. }
    10.  
    11. if (!isset($null)) {
    12.     echo '$null не существует <br>';
    13. }
    14. if (empty($null)) {
    15.     echo '$null пуста <br>';
    16. }
    17.  
     
  3. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Самое интересное, что если переменная объявляется в коде
    Код (PHP):
    1. $aaa="";
    2. if ($aaa)
    3. {echo 'true- Существует- isset <br /> ';}
    4. else
    5. {echo 'false- Не существует- isset <br />';}
    6.  
    7. if (empty($_GET['aaa']))
    8. {echo 'true- Пустая- empty <br />';}
    9. else
    10. {echo 'false- Не пустая- empty <br />';} 
    вроде как уже две переменные неправильные
    хотя в документации
    Где ошибка?
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это php )

    Код (PHP):
    1. $empty = "2";
    2. if ($empty) {
    3.     echo '$empty существует <br>';
    4. }
    5. if (!$empty) {
    6.     echo '$empty не существует <br>';
    7. }
    Попробуйте подставить 0 и php скажет что не существует. Дело в том что тут вы проверяете на true/false, а не существование переменной. Соответственно пустая строка или 0 приведётся к false, остальное к true. Не самый лучший метод для проверки короче )

    В первом вопросе вы передаете значения через URL, там двойные кавычки будут именно двойными кавычками, т.е. строкой, так же как и null.
     
  5. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Да, но в самом первом примере
    true- Существует- isset
    false- Не пустая- empty

    в таблице написано что пустая строка это false, однако для isset() у меня почему то true

    Добавлено спустя 2 минуты:
    В любом случае поведение php через get и через объявление переменной в коде разное(((
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В коде две кавычки означают начало и конец строки. Две кавычки в адресной строке - это уже строка. Они эквивалентны такой конструкции:
    Код (PHP):
    1. $a = "\"\""; 
    В GET вы не переменную PHP указываете, а просто значение GET-параметра. Это языконезависимый стандарт.
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (Text):
    1. $a = '""';
    в переменной две квычки. Хотите передать пустую переменную - передавайте
    тогда isset и empty будут true
     
  8. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Все, разобрался. Всем спасибо.Резюме:

    Метод GET:
    ...?aaa=(ЛЮБОЙ ТЕКСТ, ЦИФРЫ,ЗНАКИ)------aaa существует, aaa непустая-------string
    ...?aaa= (пробел)-----------------------------------aaa существует, aaa пустая-----------string
    ...?aaa= 0--------------------------------------------aaa существует, aaa пустая-----------string
    ...?aaa=----------------------------------------------aaa существует, aaa пустая-----------string
    ...?aaa-----------------------------------------------aaa существует, aaa пустая-----------string
    ...?yyy-----------------------------------------------aaa не существует, aaa пустая-------NULL

    Метод POST:
    ....aaa=(ЛЮБОЙ ТЕКСТ, ЦИФРЫ,ЗНАКИ)----aaa существует, aaa непустая---------string
    ....aaa= (пробел)---------------------------------aaa существует, aaa не пустая---------string
    ....aaa= 0------------------------------------------aaa существует, aaa пустая-------------string
    ....aaa=--------------------------------------------aaa существует, aaa пустая-------------string
    ....aaa---------------------------------------------aaa существует, aaa пустая-------------string
    ....yyy----------------------------------------------aaa не существует, aaa пустая---------NULL
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    фтопку браузер, тримит пробел с конца

    Добавлено спустя 1 минуту 47 секунд:
    Чтобы убедиться что в GET пробел тоже не пустая строка, можно сделать так
    Код (Text):
    1. .php?aaa=[пробел]&b=1
     
  10. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    да, тогда
    Метод GET:
    ...?aaa= (пробел)-----------------------------------aaa существует, aaa НЕ пустая-----------string

    Добавлено спустя 2 минуты 9 секунд:

    Дополнил:

    Метод GET:
    ...?aaa=(ЛЮБОЙ ТЕКСТ, ЦИФРЫ,ЗНАКИ)------aaa существует, aaa непустая-------string
    ...?aaa= (пробел)&b=2-----------------------------aaa существует, aaa непустая-----------string
    ...?aaa= (пробел)-----------------------------------aaa существует, aaa пустая-----------string
    ...?aaa= 0--------------------------------------------aaa существует, aaa пустая-----------string
    ...?aaa=----------------------------------------------aaa существует, aaa пустая-----------string
    ...?aaa-----------------------------------------------aaa существует, aaa пустая-----------string
    ...?yyy-----------------------------------------------aaa не существует, aaa пустая-------NULL

    Метод POST:
    ....aaa=(ЛЮБОЙ ТЕКСТ, ЦИФРЫ,ЗНАКИ)----aaa существует, aaa непустая---------string
    ....aaa= (пробел)&b=2---------------------------aaa существует, aaa не пустая---------string
    ....aaa= (пробел)---------------------------------aaa существует, aaa не пустая---------string
    ....aaa= 0------------------------------------------aaa существует, aaa пустая-------------string
    ....aaa=--------------------------------------------aaa существует, aaa пустая-------------string
    ....aaa---------------------------------------------aaa существует, aaa пустая-------------string
    ....yyy----------------------------------------------aaa не существует, aaa пустая---------NULL
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Смотришь в книгу видишь фигу, называется.