在类函数中使用$ _GET或$ _POST是一种好习惯吗?

时间:2012-06-17 01:17:04

标签: php web-services

我有一个php类,RegistrationController,

<?php
 class RegistrationController  extends ParentController {

    function __construct() {
        parent::__construct();
        echo 'We are inside RegistrationController';
    }

    public function register() {
        $name = $_GET['name'];
        echo "<li> We will register soon, $name </li>";
    }
 }
?>

我通过这样的URL访问注册方法,[仅供参考,我在.htaccess中使用RewriteEngine]

http://localhost:8888/Service/RegistrationController/register?name=Owl

问题

现在,一切正常,我只需要确保在请求计算时我的查询设置了?name=Owl个变量。

Web服务可从Web浏览器访问,这只是我想为我的移动应用程序制作的一项简单服务。应用程序将按原样调用此URL,除了详细信息(var)之外没有任何更改。

那么,在类的函数中可以使用$ _GET或$ _POST吗?它是可扩展的还是可维护的?


其他信息

我以非常通用的方式调用不同控制器的方法,所以在我的Bottstrap中我只是调用这个函数,它让我用几行来调用任何控制器的方法。

private function handleMethodCallOn($controller, $url) {
        //check if the URL has specified any method to call
        if(isset($url[1])) {//URL has been exploded earlier to get content
            if(method_exists($controller, $url[1])) {
                $controller->{$url[1]}();//HERE I am calling any function
            } else {
                $error = new error_404();
            }   
        }
    }

2 个答案:

答案 0 :(得分:2)

使用post并获取类方法是完全可行的。有经验的开发人员对你的代码跳出的更有可能是两件事: 1.缺乏输入验证 2.将用户输入直接转储到页面的输出中(人们只能希望你在进入数据库的过程中没有做类似的事情)。

如果您对使用框架不感兴趣,可以手动执行这些操作。 但是,有无数可靠的PHP框架可以为您引导RESTful请求,将其抽象为对象,丰富的输入验证等。

答案 1 :(得分:0)

这是“好的”,从某种意义上来说它会起作用,但不应该这样做。

这是一个简单的解决方案。而是将名称作为参数添加到寄存器方法中。

简化版......

class RegistrationController  extends ParentController {

    function __construct() {
        parent::__construct();
        echo 'We are inside RegistrationController';
    }

    public function register( $name ) {
        echo "<li> We will register soon, $name </li>";
    }
}

$registration_controller->register( $_GET['name'] )

这使代码100%透明。幕后没有秘密发生。