Делаю тестовую страницу с таким кодом Код (PHP): <?php if (isset($_GET['aaa'])) {echo 'true- Существует- isset <br /> ';} else {echo 'false- Не существует- isset <br />';} if (empty($_GET['aaa'])) {echo 'true- Пустая- empty <br />';} else {echo 'false- Не пустая- empty <br />';} ?> Далее для перехода на страницу пишу в адресной строке: .../yyy.php?aaa='"" (это две двойные кавычки без пробела) страницы выводит но тутТаблица сравнения типов в PHP написано: а у меня а если ввести .../yyy.php?aaa=null, то вообще все наоборот (empty() и isset() показывают не то что в таблице на сайте У меня: Как это понимать???
Ну так все верно же. $_GET['aaa'] равна двум кавычкам без пробела, а когда передаете null, то 'null'. Код (PHP): $empty = ""; $null = null; if (isset($empty)) { echo '$empty существует <br>'; } if (empty($empty)) { echo '$empty пуста <br>'; } if (!isset($null)) { echo '$null не существует <br>'; } if (empty($null)) { echo '$null пуста <br>'; }
Самое интересное, что если переменная объявляется в коде Код (PHP): $aaa=""; if ($aaa) {echo 'true- Существует- isset <br /> ';} else {echo 'false- Не существует- isset <br />';} if (empty($_GET['aaa'])) {echo 'true- Пустая- empty <br />';} else {echo 'false- Не пустая- empty <br />';} вроде как уже две переменные неправильные хотя в документации Где ошибка?
Это php ) Код (PHP): $empty = "2"; if ($empty) { echo '$empty существует <br>'; } if (!$empty) { echo '$empty не существует <br>'; } Попробуйте подставить 0 и php скажет что не существует. Дело в том что тут вы проверяете на true/false, а не существование переменной. Соответственно пустая строка или 0 приведётся к false, остальное к true. Не самый лучший метод для проверки короче ) В первом вопросе вы передаете значения через URL, там двойные кавычки будут именно двойными кавычками, т.е. строкой, так же как и null.
Да, но в самом первом примере true- Существует- isset false- Не пустая- empty в таблице написано что пустая строка это false, однако для isset() у меня почему то true Добавлено спустя 2 минуты: В любом случае поведение php через get и через объявление переменной в коде разное(((
В коде две кавычки означают начало и конец строки. Две кавычки в адресной строке - это уже строка. Они эквивалентны такой конструкции: Код (PHP): $a = "\"\""; В GET вы не переменную PHP указываете, а просто значение GET-параметра. Это языконезависимый стандарт.
Код (Text): $a = '""'; в переменной две квычки. Хотите передать пустую переменную - передавайте тогда isset и empty будут true
Все, разобрался. Всем спасибо.Резюме: Метод 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
фтопку браузер, тримит пробел с конца Добавлено спустя 1 минуту 47 секунд: Чтобы убедиться что в GET пробел тоже не пустая строка, можно сделать так Код (Text): .php?aaa=[пробел]&b=1
да, тогда Метод 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