So far there seems to be a lot of concern around BC, and particularly removing or getting rid of GPC superglobals. So I completely understand the concerns and hope to address them as clearly as possible.
First, for the sake of BC I think removing the superglobals from the language should not be done here. Instead, for performance reasons, I'm going to propose that the superglobals are not populated at the request level. This means that the implementation is free to populate them at will since they will still exist, but will be initialized to empty arrays by the language. Second, it's a valid concern that's there's no actual proposed interface. So let me be begin by proposing a rough draft for one. So let's consider the following interface layout and some sample implementations as a start... https://gist.github.com/srgoogleguy/f729053e3e88b2d2b3ec Then let's consider the kind of flexibility this would allow userland in terms of filtering, validating, and modifying the request data under various conditions. Obviously, PHP has to provide some form of default implementation so some base class HttpRequest can be implemented in PHP and this can be easily extended by userland. Also, take into consideration the kind of performance gains you might get out of this by doing things like lazy-loading or lazy parsing or lazy-filtering of request data. Filters also need not be applied at the global level. PHP's default implementation would simply use the input stream to populate GPC as normal (as it currently does), but I believe introducing the base class will encourage others to make better use of request/response handling in their own code.