首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用PHP Superglobals还是Filter Input来检索$_GET数据?

我应该使用PHP Superglobals还是Filter Input来检索$_GET数据?
EN

Stack Overflow用户
提问于 2011-04-14 23:40:19
回答 7查看 7.6K关注 0票数 10

我真的很讨厌全局变量--也许这是我的C#程序员,但当我在PHP中工作时,我每次都会咬紧牙关做这样的事情:

代码语言:javascript
复制
$strUsername = $_GET['username'];

是的,我把它过于简单化了,是的,是的,我正确地清理了所有这些东西。事实上,对于我构建的框架,所有的超全局变量几乎在执行开始时就被捕获,并从那里开始依赖注入。

我在PHP手册中遇到了这个函数(你确实每天都能学到一些新东西):filter_input_array()。

所以现在,从技术上讲,我可以这样做,而不是从GET superglobal抓取所有东西:

代码语言:javascript
复制
$GETdata = filter_input_array(INPUT_GET);

……我的问题是:我是不是应该使用filter_input_array来避免超全局函数的灾难,还是有什么理由坚持使用它们而忘记使用filter_input函数?其他人对此的经验是什么?

编辑:我忘了一件事-- filter_input函数对您对超全局变量所做的任何脚本级修改都是看不见的,所以如果我这样做了:稍后尝试执行filter_input(INPUT_GET, 'cheese');$_GET['cheese'] = 'puff';将返回null。这是很好的,因为我依赖注入所有东西,但它可能会让一些人稍后猝不及防,如果他们不知道。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-14 23:45:55

使用filter_input_array仍然使用超全局变量,因为它仍然从一个超全局数组中获取数据。

从这些数组中获取数据并没有错,这实际上是获取数据的唯一方法。你只需要确保无论你在什么地方使用它,你都要避开它。

html的实体、pdo的准备好的字符串、mysql_函数的mysql_real_escape_String等等...

票数 9
EN

Stack Overflow用户

发布于 2011-04-14 23:45:46

为什么全局变量是不好的?

常见的论点是,因为您向外部状态引入了不安全的依赖关系。

您的解决方案无法阻止这一点,它只是隐藏了它。

一个更好的解决方案是,imho,提供$_GET作为参数,如下所示

代码语言:javascript
复制
function myController($get) {
   $user = Model::get_user($get['userid']);
   render_view('user.html', $user);
}

myController($_GET)

因为这说明了为什么全局变量被认为是不好的。

票数 5
EN

Stack Overflow用户

发布于 2011-04-14 23:48:17

我使用PHP超全局变量,但仅在我的框架中的库级别使用。这是一个框架,所有的控制器都可以访问请求对象,而请求对象又可以访问超全局变量。这允许您通过创建一个填充了测试参数的模拟请求对象来为控制器编写测试。这一切都是关于好的OO设计和好的设计模式。

在没有任何抽象的情况下,直接在任何地方访问超全局变量是一种反模式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5665813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档