如何在PHP中处理REQUEST

时间:2010-01-06 22:48:16

标签: php httpwebrequest rpc

是否有一个类来处理$_REQUEST,这使得php开发人员的生活更轻松? 我想更轻松地处理客户端请求。 我不想用if(is_set($_REQUEST['blabla'])) {makesomthing();}进行测试 我希望有这样的解决方案。

class rpclike
{
 public function getMember()
 {
  $memberid = $this->inputhandler['memberid'];
  $member = $this->memberclass->getmember($memberid);

   foreach($member as $mem)
   {
    echo $mem->id;
   }
 }

}

$rpc = new rpclike();

然后如果我从像这样的javascript调用rpclike

<a href="#" onclick="GETURL("rpclike.php?getMember&memberid=22")">Get member</a>

哪个班级可以做类似的事情?

5 个答案:

答案 0 :(得分:2)

不建议您使用$_REQUEST,因为它会带来安全问题。您应该使用$_GET$_POST$_COOKIE中的一个,具体取决于您尝试检索的全局请求var。你最好的选择是拥有以下内容:

class input {

    public static function get($key, $value = false) {
        return (!empty($_GET[$key])) ? $_GET[$key] : $value;
    }

    public static function post($key, $value = false) {
        return (!empty($_POST[$key])) ? $_POST[$key] : $value;
    }

    public static function cookie($key, $value = false) {
        return (!empty($_COOKIE[$key])) ? $_COOKIE[$key] : $value;
    }

}

然后你可以使用类:

if (input::post('field', null) != null) {

}

if (input::get('field', false) != false) {

}

虽然这仍然需要测试,但您可以在没有为全局变量设置数据的情况下显式设置返回值。

答案 1 :(得分:1)

PHP实际上并没有一种默认的类结构,你可以采用这种方式,因为它的起源是基于程序的编程。

如果你觉得有必要的话,你可以创建一个类似的课程。但是,你真的只是增加开销。如果它的便利性对你有用,那么你可以利用__get() and __set()方法为你处理存在检查。

您希望以更简单的方式使用它来处理客户端请求这一事实可能是一个很好的指标,您应该转向类似MVC框架的东西,它通常处理URL并自动将它们路由到适当的方法。大多数PHP框架都会为您完成此操作。有关该过程通常如何运作的详细概述,您可以see how CodeIgniter does it

答案 2 :(得分:1)

除了涉及明显的安全风险外,这是可行的。这是在MVC系统中用于转向请求的常见模式。

假设您请求index.php?class = User&amp; method = ViewProfile

$module = new $_GET['class']();
if(!method_exists($module,$_GET['method']))
$module->$eventName();

答案 3 :(得分:0)

我不这么认为。能够调用任意方法将是一个巨大的安全漏洞。

答案 4 :(得分:-1)

做类似的事情:

url: /foo/bar?req=getMembers&memberid=22

然后你可以这样做:

$request = $_GET['req'];
$request();

稍微危险的版本:

$req_methods = array(
    getMembers => 'some_function',
    saveMembers => 'another_function',
    sendMessage => 'send_him_an_email'
);
$request = $_GET['req'];
$req_methods[$request]();