PHP читает переменную get, которая может быть или не быть установлена - PullRequest
8 голосов
/ 19 апреля 2010

Если вы попытаетесь прочитать значение переменной 'get', что произойдет, если указанная переменная не была задана в URL. Пример: вы запрашиваете страницу test.php, в этом файле она пытается прочитать значение $_GET['message']. Что происходит в этом случае? доза значение просто возвращается как ''?

Означает ли это, что если я всегда ожидаю ввода значения и не желаю принимать значение '', я могу просто сделать что-то вроде

$foo = $_GET['bar'];
if($foo == ''){
  // Handle my 'error'
}
else
{
  // $foo should now have a value that I can work with
}

Пожалуйста, имейте в виду, я знаю, что могу использовать isset($_GET['bar']) Но я не просто хочу знать, установлен ли он, мне все равно, если он установлен, мне просто важно, имеет ли оно это больше, чем просто пустая строка.

Ответы [ 4 ]

7 голосов
/ 19 апреля 2010

Если вам все равно, действительно ли установлено значение, вы можете использовать это:

if (empty($_GET['bar']))
    // value is null, false, 0, '0' or an empty string (including whitespace).
6 голосов
/ 19 апреля 2010

Если вы попытаетесь получить доступ к элементу массива, который не существует, результат будет null.

$foo = $_GET['bar']; //$foo is now null

Стоит отметить, что если вы используете слабый оператор сравнения == вместо строгого сравнения ===, то '' будет считаться нулевым.

Недостатком приведенного выше кода является то, что он будет генерировать уведомление при доступе к массиву с несуществующим индексом, который немного запутан.

Следовательно, вы должны проверить, установлено ли значение, прежде чем присваивать содержащееся значение переменной.

if ( !isset($_GET['bar']) ){
    //handle error or assign default value to $foo
}else{
    $foo = $_GET['bar'];
}

Если вы хотите иметь значение по умолчанию и заменять это значение по умолчанию, только если существует значение $ _GET, вы можете использовать условный оператор (прокрутите вниз до «Тернарный оператор»)

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value';
1 голос
/ 11 июля 2014

Вот как я это делаю.

$foo = ( isset( $_GET['bar'] ) ) ? $_GET['bar'] : false;

if(false === $foo){
   die( 'no Foo for your Bar' );
}

Как сторона, вы, вероятно, никогда не получите истинное логическое значение от $ _GET

0 голосов
/ 19 апреля 2010

Если я правильно понимаю, это:

$foo = $_GET['bar'];
if ((!isset($foo)) || $foo == '') {
//GET veriable not set, error
}
else {
// GET veriable set, code here.
}
...