foreach $ _POST ..这样糟糕吗?

时间:2011-02-18 05:59:45

标签: php

使用foreach来制作所有帖子数据的数组与确切地定义你接受的帖子是不是不好的做法?


class Foo { 

    function __construct()
    {
        foreach($_POST as $key => $var)
        {
            $this->post[] = $key = $var;
        } 
    }

    function bar()
    {
        echo $this->post['postdata'];
    }

}       

VS


class Foo { 

    function __construct()
    {
        $this->post = array(
          "postdata" => $_POST['postdata']
        );
    }

    function bar()
    {
        echo $this->post['postdata'];
    }

}       

2 个答案:

答案 0 :(得分:4)

自动处理所有POSTed字段没有太大的危害,只要该处理仅限于存储在哈希中。事实上,它可以使代码更容易维护。

当您开始使用该数据执行某些操作(尤其是系统相关)时,您需要进行验证。

答案 1 :(得分:1)

我在这段代码中找到的唯一非常糟糕的做法是使用全局状态/数据。您的对象永远不应该在外部数据上传递。最好将此数据作为方法参数传递给对象:

 __construct(array $post) {
     foreach (...) {

     }
 }

 new Abc($_POST);

回到你的问题......更严格的验证器通常更好,但它总是取决于你想要实现的目标。您可以定义预期元素的列表,并在找到一些额外元素时抛出异常。