PHP - Используйте isset в функции не работа..?

У меня есть Сценарий PHP, что при загрузке проверьте сначала, был ли он загружен через POST, если не, если ДОБИРАЮТСЯ ['идентификатор'], число.

Теперь я знаю, что мог сделать это как это:

if(isset($_GET['id']) AND isNum($_GET['id'])) { ... }

function isNum($data) {  
    $data = sanitize($data);
    if ( ctype_digit($data) ) {
        return true;
    } else {
        return false;
    }
}

Но я хотел бы сделать это этот путь:

if(isNum($_GET['id'])) { ... }

function isNum($data) {  
    if ( isset($data) ) {
        $data = sanitize($data);
        if ( ctype_digit($data) ) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

Когда я пробую его этот путь, если $ _GET ['идентификатор'] не установлен, я получаю предупреждение неопределенного индекса: идентификатор... Это похоже, как только я поместил свой $ _GET ['идентификатор'] в рамках моего вызова функции, это отправляет предупреждение... Даже при том, что моя функция проверит, установлен ли тот var или нет...

Есть ли другой способ сделать то, что я хочу сделать, или я вынужденный всегда проверить, что isset затем добавляют мои другие требования..??

5
задан pnichols 14 June 2010 в 15:06
поделиться

5 ответов

Я всегда добавляю удобную функцию, которую предоставляют некоторые другие языки: get.

function get($needle, $haystack, $return=null) {
    return array_key_exists($needle, $haystack) ? $haystack[$needle] : $return;
}

Теперь вы можете позвонить:

if(isNum(get('id', $_GET))) {
    // do something here
}
4
ответ дан 14 December 2019 в 18:59
поделиться

Это то, что вы хотите, убедитесь, что идентификатор установлен ПЕРЕД вызовом isNum :


if(isset($_GET['id']) && isNum($_GET['id'])) {
...
}

-2
ответ дан 14 December 2019 в 18:59
поделиться

Вы ссылаетесь на неопределенный индекс при его первоначальной передаче. Вы можете сделать так:

$key = 'id';

function foo($id ) {
    if ( isset( $_GET[$id] ) ) { 
    }
}

В качестве альтернативы вы можете просто сделать isset перед вызовом функции.

if ( isset($_GET['id']) && isNum($_GET['id'])) { }

Другой вариант - использовать временную переменную:

$foo = isset( $_GET['id'] ) ? $_GET['id'] : null;
if ( $foo ) { functionCall($foo); }

Вы также можете снизить уровень сообщений об ошибках, если вас это не так сильно беспокоит.

0
ответ дан 14 December 2019 в 18:59
поделиться

Вы можете изменить isNum для получения параметра по ссылке

<?php

if(isNum($_GET['id'])) { ... }

function isNum(&$data) {
    if (isset($data) ) {
        $data = sanitize($data);
        return ctype_digit($data);
    } else {
        return false;
    }
}

Однако $ _ GET ['id'] будет неявно создан по вызову и инициализируется значением NULL .

Если вас не устраивает это или хакерский характер этого решения, выберите другой ответ.

3
ответ дан 14 December 2019 в 18:59
поделиться

Вот элегантный способ сделать это с помощью специального класса:

Сначала определите класс SmartArray:

class SmartArray extends ArrayObject {
    public static function convert(&$array) {
        $array = new self($array);
    }
    public function offsetGet($index) {
        return $this->offsetExists($index)? parent::offsetGet($index):NULL;
    }
}

Затем просто вызовите:

SmartArray::convert($_GET);

Теперь ваш if ( isNum ($ _ GET ['id'])) {...} больше не будет жаловаться, если $ _GET не имеет ключа 'id' :)

0
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: