所以,我不是来自庞大的
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.)
我喜欢将$_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)会自动将数据转换为自定义值类型.