我确实喜欢将 $_SESSION、$_POST、$_GET 和 $_COOKIE 包装到 OOP 结构中。
我使用这种方法来集中处理卫生和验证的代码、所有必要的isset () 检查、随机数、setcookie 参数等。它还允许客户端代码更具可读性(并给我一种错觉:它更易于维护)。
强制使用这种结构可能很困难,尤其是在有多个编码员的情况下。使用$_GET、$_POST 和$_COOKIE(我相信),您的初始化代码可以复制数据,然后销毁超全局。也许一个聪明的析构函数可以通过 $_SESSION 实现这一点(在加载时擦除 $_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 中提取,然后使用神奇的__get 方法将它们作为属性返回。无法通过这种方式访问失败的字段。我的验证方法(required 除外)不会在空字段上失败,其中许多使用 func_get_args 来允许它们一次对多个字段进行操作。一些方法(如money)会自动将数据转换为自定义值类型。
在错误情况下,我有办法将数据转换为可以保存在会话中的格式,并用于预填充表单并在重定向到原始表单后突出显示错误。
对此进行改进的一种方法是将验证信息存储在 Form 类中,该类用于呈现表单并支持客户端验证,以及在提交后清理数据。