类设计改进-推特-解耦超全局变量


class design improvement - tweet - decoupling super global variables?

问题:

我是否应该解耦SESSION变量,即将它们移出类。。。这是来自另一个POST的建议。我想把这个库扩展到更一般的情况,而不仅仅是为了我的目的。。我相信这是下一步?

摘要:

这个类以自定义标记语言的形式向客户端发送"tweet"数据。

它被用于Ajax调用,在之前的帖子中,人们建议不要回显结果。。但这是我通过Ajax responseText与服务器通信的主要方式。

此外,<tw_p>用于表示通行证,并且由客户端读取。标记如下所示。

字段1|字段2|字段3|字段4||字段1|场2|场3|场4||

它被称为这样-

new tweet();

客户端知道如何在收到xhtml后将其呈现为xhtml

/*tweet*/
class tweet extends post
  {
  function __construct()
    {
    parent::__construct();
    $email=$_SESSION['email'];
    $flname=$_SESSION['name'];
    $message=$this->_protected_arr['f4b'];
    $time=time();
    database::query("INSERT INTO tw VALUES ('$time','$flname','$message','$email')");        
    $query_return = database::query("SELECT * FROM tw ORDER BY time DESC LIMIT 7");
    $b=0;
    $c='<tw_p>';
    while($a=mysqli_fetch_assoc($query_return))
      {  
      if($b==0)
        {
        $c = $c . $a['email'] . "|" .  $a['fname'] . "|" . $a['time'] . "|" . $time . "|" . $a['message'];
        }
      else
        {
        $c = $c . "||" . $a['email'] . "|" .  $a['fname'] . "|" . $a['time'] . "|" . $time . "|" . $a['message'];
        }
      $b++;
      }
    echo $c;
    }
  }

如果是我的代码,我会怎么做:

  1. 从构造函数中删除逻辑,它仅用于初始化。因此,将所有业务逻辑删除到单独的方法doTheWork中(选择解释代码中发生的事情的有意义的名称(
  2. 将构造函数参数化为:
    • 电子邮件
    • 名称
    • 数据库实例(是的,我会避免静态database::query()方法(
  3. 最后去掉echo $c;,换成return $c;
  4. 从类外部移除表示逻辑(带有||内容的行(
  5. 对查询中使用的数据进行消毒(感谢vzwick(