在类属性中包装超全局$ _GET

时间:2014-10-01 19:01:31

标签: php superglobals

目标是在类的属性中获得$_GET的精确值,同时:

  1. 删除任何不需要的密钥
  2. 未定义键时的默认值
  3. 将此代码放在文件/request.php中:

    $req = new request();
    var_dump($req);
    class request {
      private $Get;
      function __construct() {
        $this->Get = filter_input_array(INPUT_GET,array (
          'menu'=>array (
            'filter'=>FILTER_VALIDATE_INT,
            'options'=>array (
              'default'=>30,
            ),
          ),
        ));
      }
    }
    

    来自php's man page for filter_input_array()关于第三个参数(默认为true):

      

    将缺失的密钥添加为返回值为NULL。

    我希望调用domain.com/request.php会产生默认的[sic]数组,其中整数30为menu的值。但是当没有定义$_GET时(也就是说,当url中的问号后没有字符时),filter_input_array返回null因此var_dump是这样的:

      

    对象(请求)#1(1){[" Get":" request":private] => NULL}

    但是,如果定义$_GET(即在网址中的问号后面至少有一个字符),例如调用domain.com/request.php?a,则会产生:

      

    对象(请求)#1(1){[" Get":" request":private] => array(1){[" menu"] => NULL}}

    如何强制filter_input_array()返回数组,以便即使我调用的网址没有定义为index.php的$ _GET值,也会构建默认值? < / p>

    似乎可以重写来自.htaccess的请求,这样我可以模仿定义的$ _GET值,如果没有,但感觉很奇怪。

1 个答案:

答案 0 :(得分:1)

为什么不使用另一种简单的方式?

var_dump(filter_var_array($_GET, array(
  'key' => FILTER_DEFAULT,
), true));