$ _REQUEST没有索引

时间:2012-09-12 13:33:55

标签: php optimization

我正在使用带有$_REQUEST数组的查询字符串,每次我想访问任何键我都使用这个条件

if(array_key_exists('scene_id', $_REQUEST))

有没有办法在没有任何警告和错误的情况下直接使用$_REQUEST["scene_id"]

4 个答案:

答案 0 :(得分:4)

你可以将它包装在你自己的函数中:

function request($key, $default=null) {
    return isset($_REQUEST[$key])
        ? $_REQUEST[$key]
        : $default;
}

echo request('scene_id');

答案 1 :(得分:1)

使用isset

if(isset($_REQUEST['scene_id']))

$scene_id = isset($_REQUEST['scene_id']) ? $_REQUEST['scene_id'] : null;

答案 2 :(得分:0)

最常用的方法是使用isset if(isset($_REQUEST['scene_id'])),但您实际上可以使用@符号来抑制错误消息,但请注意,错误仍然存​​在,并且需要正确处理

来自PHP文档

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

示例1

if(@$_REQUEST['scene_id'])
{
    echo "ok" ;
}

示例2(过滤,验证或例外)

try {
    if (!isset($_REQUEST['scene_id']))
        throw new Exception("Missing Scene ID");

    if (!filter_var($_REQUEST['scene_id'], FILTER_SANITIZE_NUMBER_INT))
        throw new Exception("Only Valid Number Allowed");

    echo "Output ", $_REQUEST['scene_id'];
} catch ( Exception $e ) {
    print $e->getMessage();
}

?>

答案 3 :(得分:0)

在测试之前,您可以使用默认值预填充$ _REQUEST:

$expected = array(
    'scene_id'=>false,
    'another_var'=>'foo',
);

foreach($exptected as $key=>$default) {

    if (!isset($_REQUEST[$key])) {
        $_REQUEST[$key] = $default;
    }

}

if ($_REQUEST['scene_id') {
    // do stuff
}