在PHP中直接使用superglobals好坏?

前端之家收集整理的这篇文章主要介绍了在PHP中直接使用superglobals好坏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我不是来自庞大的 PHP背景 – 我想知道如果在格式良好的代码中,应该直接使用’superglobals’,例如在一些函数的中间说$_SESSION [‘x’] =’y’;或者,如果像我通常使用变量一样,最好将它们作为可以从那里使用的参数发送,例如:
class Doer {
    private $sess;
    public function __construct(&$sess) {
        $this->sess =& $sess;
    }
} 

$doer = new Doer($_SESSION);

然后在Doer中使用Doer-> sess版本等. (这种方法的优点是它清楚地表明Doer使用$_SESSION.)

这个问题的PHP设计方法是什么?

我喜欢将$_SESSION,$_POST,$_GET和$_COOKIE包装到OOP结构中.

我使用这种方法来集中处理卫生和验证的代码,所有必要的isset()检查,nonce,setcookie参数等.它还允许客户端代码更具可读性(并且让我觉得它更易于维护).

可能难以强制使用这种结构,尤其是在存在多个编码器的情况下.使用$_GET,$_POST和$_COOKIE(我相信),您的初始化代码可以复制数据,然后销毁超全局.也许一个聪明的析构函数可以用$_SESSION实现这一点(在加载时擦除$_SESSION,在析构函数中写回),尽管我没有尝试过.

但是,我通常不会使用任何这些强制技术.习惯了之后,在会话类之外的代码中看到$_SESSION看起来很奇怪,而且我主要是单独工作.

编辑
这是一些示例客户端代码,以防它帮助某人.我确信看看任何一个主要的框架会给你更好的想法……

$post = Post::load ();  
$post->numeric ('member_age');  
$post->email ('member_email');
$post->match ('/regex/','member_field');
$post->required ('member_first_name','member_email');
$post->inSet ('member_status',array('unemployed','retired','part-time','full-time'));
$post->money ('member_salary');
$post->register ('member_last_name'); // no specific requirements,but we want access
if ($post->isValid())
{
  // do good stuff
  $firstName = $post->member_first_name;
}
else
{
  // do error stuff
}

Post及其朋友都派生自一个实现核心验证代码的基类,添加自己的特定功能,如表单令牌,会话cookie配置等等.

在内部,该类包含一系列有效数据,这些数据在调用验证方法时从$_POST中提取,然后使用magic __get方法将它们作为属性返回.无法以这种方式访问​​失败的字段.我的验证方法(除了必需)在空字段上不会失败,并且其中许多方法使用func_get_args来允许它们一次对多个字段进行操作.某些方法(如money)会自动将数据转换为自定义值类型.

错误的情况下,我有办法将数据转换为可以保存在会话中的格式,并用于预先填充表单并在重定向到原始表单后突出显示错误.

改进这一点的一种方法是将验证信息存储在Form类中,该类用于呈现表单并为客户端验证提供支持,以及在提交后清理数据.

猜你在找的PHP相关文章