Доступ к GET и POST по ссылке - PullRequest
1 голос
/ 04 августа 2010

Я узнал, как получить доступ по ссылке в другом ответе на stackoverflow, но не могу найти его снова.В любом случае, следующий метод небезопасен или вообще ненадежен?

protected function checkVar($requestType, $varname, $checkIfNumber = false)
{
    switch($requestType)
    {
        case 'GET':
            $sg = &$_GET;
            break;
        case 'POST':
            $sg = &$_POST;
            break;
        default:
            throw new Exception('Variable `$requestType` is not `GET` or `POST` in AController::checkVar().');
    }

    if(!isset($sg[$varname])) {
        throw new Exception("$requestType variable [$varname] is not set in AController::checkVar().");
    } else if(empty($sg[$varname])) {
        throw new Exception("$requestType variable [$varname] is empty in AController::checkVar().");
    } else  if($checkIfNumber) {
        if(!ctype_digit($sg[$varname])) {
            throw new Exception("$requestType variable [$varname] is not a number in AController::checkVar().");
        }
    }   

    return $sg[$varname];
}

Ответы [ 2 ]

3 голосов
/ 04 августа 2010

Это не то, как вы должны использовать ссылки.Операция «копирования» на самом деле дешевле, если значения не меняются, и здесь нет необходимости в ссылке (особенно если вы не возвращаетесь по ссылке, а делаете копию).Единственное, на что могут ссылаться ссылки в этой части кода, - это в дальнейшем вызывать неясные ошибки, которые довольно сложно отследить.

2 голосов
/ 04 августа 2010

Вот почему у нас есть $ _ REQUEST superglobal.

protected function checkVar($varname, $checkIfNumber = false)
{
    if(!isset($_REQUEST[$varname])) {
        throw new Exception("variable [$varname] is not set in AController::checkVar().");
    } else if(empty($_REQUEST[$varname])) {
        throw new Exception("variable [$varname] is empty in AController::checkVar().");
    } else  if($checkIfNumber) {
        if(!ctype_digit($_REQUEST[$varname])) {
            throw new Exception("variable [$varname] is not a number in AController::checkVar().");
        }
    }   

    return $_REQUEST[$varname];
}

Я знаю, что это не совсем то же самое, но ИМХО, это достаточно хорошо.

...