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

时间:2011-10-03 00:04:22

标签: php

问题:

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

要点:

此类以自定义标记语言的形式向客户端发送“推文”数据。

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

此外,<tw_p>用于表示传递,并由客户端读取。标记看起来像这样。

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

它被称为这样 -

new tweet();

客户端知道如何在收到它后将其呈现为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 个答案:

答案 0 :(得分:1)

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

  1. 从构造函数中删除逻辑,它仅用于初始化。因此,将所有业务逻辑删除到单独的方法doTheWork中(选择有意义的名称来解释代码中发生的情况)
  2. 使用以下参数化构造函数:
    • 电子邮件
    • 名称
    • 数据库实例(是的,我会避免使用静态database::query()方法)
  3. 最后删除echo $c;并将其替换为return $c;
  4. 从此课程中删除演示逻辑(带有||内容的行)
  5. 清理查询中使用的数据(感谢vzwick