Maison  >  Article  >  développement back-end  >  Analyse de code d'un simple cas de discussion de groupe QQ (implémentation PHP)

Analyse de code d'un simple cas de discussion de groupe QQ (implémentation PHP)

易达
易达original
2020-06-01 12:48:283502parcourir

Question :

Utilisez la programmation orientée objet pour implémenter la logique métier suivante :

1. Zhang San a utilisé le compte a et le mot de passe b pour se connecter à qq

. 2. Afficher l'heure de la dernière connexion de Zhang San

3. Zhang San a vérifié les informations du groupe du département administratif dans l'heure (il y a Zhang San, Li Si et Wang Wu dans ce groupe, dont Zhang San est le chef du groupe)

4. Afficher les informations que Zhang San a vues

5 Soudain, Zhang San a reçu un message de son ami Li Si : Le message était : Zhang San, je suis Li. Si, qu'est-ce que tu fais ? (Zhang San a créé un groupe d'amis avec l'ami Li Si dedans)

6 Zhang San a répondu à Li Si : Je pense à toi

Tout d'abord, allons-y. analysez-le

1. Analyse du processus

1. Zhang San s'est connecté à qq en utilisant le compte a et le mot de passe b

2. heure

3. Zhang San a vérifié les informations du groupe du département administratif dans l'heure (il y a Zhang San, Li Si et Wang Wu dans ce groupe, dont Zhang San est le chef de groupe)

4. Sortie Zhang Les informations que San a vues

5. Li Si a envoyé un message à Zhang San, le message était : Zhang San, je suis Li Si, qu'est-ce que tu fais

6. Zhang San a envoyé un message à Li Si, le message est : Je pense à toi

2. Analyse fonctionnelle :

1. l'objet

Membres QQ, informations de connexion des membres QQ, messages des membres QQ, groupes de membres QQ, la relation entre les membres QQ et les groupes (un-à-plusieurs)

2. Identifiez les attributs de l'objet

Membre QQ :

Attributs : identifiant, nom, numéro de compte, mot de passe

Informations de connexion du membre QQ : (Un membre peut se connecter plusieurs fois et avoir plusieurs enregistrements de connexion)

Attributs : identifiant, identifiant de membre, heure de connexion

Message du membre QQ : Attributs : identifiant, contenu, heure d'envoi, expéditeur, destinataire, statut (lu, non lu), heure de visualisation

Groupe de membres QQ : Attributs : identifiant, membre créé, nom du groupe, heure de création du groupe

Relation entre les membres QQ et les groupes : (Cette relation est également un classe et peut également produire de nombreuses instances)

Attributs : id, user_id, group_id, create_time

3 Méthodes d'identification des objets

Membres QQ :

Méthode :

1. Connectez-vous,

2. Afficher les messages

3. Envoyer des messages

Informations de connexion des membres QQ :

1. Enregistrez les informations de connexion du membre

2. Obtenez les dernières informations de connexion de l'utilisateur

Message du membre QQ :

Méthode : Modifier le statut (peut être modifié tel que lu), obtenir les messages des membres, ajouter des membres Message

Groupe de membres QQ :

Méthode : 1. Obtenez tous les groupes 2. Créez le groupe (Zhang San a vérifié le groupe du service administratif, indiquant que ce groupe doit avoir été créé par quelqu'un)

La relation entre les membres de QQ et les groupes :

Méthode : 1. Visualiser tous ses groupes selon le membre = Obtenir tous les groupes du membre

2. Selon un groupe, vous pouvez visualiser ce groupe Tous les membres dans

3. Analyse de la base de données :

1.QQ membres : Les attributs correspondent aux champs du tableau

2. Message membre QQ : Les attributs correspondent aux champs du tableau

3. Groupe membre QQ : Les attributs correspondent aux champs du tableau table

4. La table intermédiaire entre les membres QQ et les groupes : car Un membre peut appartenir à plusieurs groupes de membres, il y a donc besoin de cette table

Champs : id, member id, group identifiant, heure d'adhésion au groupe

5. Liste des informations de connexion des membres QQ

Une fois l'analyse terminée, effectuons les opérations spécifiques

1. initialiser les données

Créer la base de données. Essayons de rendre le nom aussi simple à comprendre que possible. Cela s'appelle qq

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Créer la table qq_group. groupe de membres de la table

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Créer une table de messages qq_msg

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Créer une table d'adhésion qq_user

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Créer la table qq_user_group_relation membre et table de relations de groupe

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Créer la table qq_user_login_record table d'enregistrement des informations de connexion des membres

Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Données d'initialisation, quelles sont les données de démarrage du projet ?

1 Les membres sont Zhang San, Li Si et Wang Wu. Ils ont respectivement leur propre compte et mot de passe.

2. Il existe 2 groupes, le groupe du service administratif et le groupe d'amis

3. Zhang San a créé un groupe de département administratif, et Zhang San, Li Si et Wang Wu font tous partie de ce groupe

4. Zhang San a également créé un groupe d'amis, qui comprend Li Si

Ensuite, nous remplissons ces données dans la base de données

1. Les membres sont Zhang San, Li Si et Wang Wu. Ils ont respectivement des mots de passe de compte (qq_user)

. 1Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

2. Il existe 2 groupes de département administratif, groupe d'amis (qq_group)

2Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

3. Zhang San a créé un groupe de département administratif, Zhang San, Li 4. . Wang et Wu font tous partie de ce groupe

4. Zhang San a également créé un groupe d'amis, qui comprend Li Si (qq_user_group_relation)

3Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP).

Afin d'avoir des messages dans le groupe administratif, on essaie d'abord d'ajouter un enregistrement dans la table des messages

4Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

2. Créer une classe, classe d'implémentation

Selon l'analyse, nous devrions créer au moins 5 classes, mais toutes les classes nécessitent une connexion à la base de données, nous pouvons donc créer une classe de base de données séparément, donc 6 classes doivent être créées

Afin de faciliter la gestion, nous mettons ces classes dans le répertoire model

model/Mysql.class.php


<?php
//数据库连接类
class Mysql{
    //属性:id,姓名,账号,密码,登录时间
    public $link = "";//id
   
    public function __construct(){
        //创建连接
        $this->init();
    }
    public function __destruct(){
        //销毁数据库连接
        if( $this->link ){
            mysqli_close($this->link);
        }
    }
    //创建连接,初始化连接
    public function init(  ){
       //创建连接
       $config = Array(
           "type"=>&#39;mysql&#39;,
           "hostname"=>"127.0.0.1",
           "database"=>"qq",
           "username"=>"root",
           "password"=>"root"
       );
       $this->link = mysqli_connect($config[&#39;hostname&#39;],$config[&#39;username&#39;],
        $config[&#39;password&#39;],$config[&#39;database&#39;]);
       
    }
}
?>

model/Group.class.php


<?php
require_once "MySql.class.php";
class Group{
    // 属性:id,创建会员,群名称,群的创建时间
    public $id = "";
    public $userid = "";
    public $groupName = "";
    public $createTime = "";
    public $mySql = "";
    public $tableName = "qq_user_group";
    public function __construct(){
        $this->mySql = new MySql();
    }
    //1.获取所有的群 
    //如果不指定具体的创建人,可以获取所有的群
    public function getAll($creatorUserId=&#39;&#39;){
        //创建连接
        $conn = $this->Mysql->link;
        //写sql,执行sql
        $where = "";
        if( !empty($userid) ){
            $where .= " creator_user_id=".$creatorUserId;
        }
        $sql = "select * from {$this->tableName} where 1=1 and {$where}";
        //执行sql
        $result = mysqli_query($conn,$sql);

        //获取数据
        // $list = mysqli_fetch_all($result);
        $list = Array();
        while( $row=mysqli_fetch_assoc($result) ){
            $list[] = $row;
        }
        //end
        //返回数据
        return $list;
    }
    //2.创建群 留给同学些,课上就不写了,因为目前的最终效果不需要呈现,默认已经是张三创建好了
    public function create(){
        echo "创建了群";
    }
    
}
?>

Message.class.php

<?php
require_once  dirname(__FILE__)."/MySql.class.php";

// 会员消息类
class Message{
    //属性:id,内容,发送时间,发送人,接收人,状态(已读,未读),查看时间
    public $id = "";
    public $content = "";
    public $sendTime = "";
    public $sendUserId = "";
    public $toUserId = "";
    public $status = "";
    public $readTime = "";
    public $mySql = "";
    public $tableName = "qq_msg";
    public function __construct(){
        $this->mySql = new MySql();
    }
    

    // 方法:修改状态(可以被修改为已读),查看消息,发送消息
    public function updateStatus($id,$status){
        //创建连接
        $conn = $this->mySql->link;
        //写sql,执行sql
        $sql = "update {$this->tableName} set status={$status} where id={$id}";
        //执行
        $result = mysqli_query($conn,$sql);
        if( $result ){
            return true;
        }else{
            return false;
        }

    }
    //查看会员消息列表
    public function getMsgList($userid,$type,$startTime,$endTime,$groupId){
        //创建连接
        $conn = $this->mySql->link;
        //写sql,执行sql
        $where = " to_user_id={$userid} ";
        if( $type !=""){//这里特别注意不能直接写!empty,会导致0的情况考虑不进来 而0表示未读
            $where .= " and status=".$type;
        }
        if( !empty($startTime) && !empty($endTime) ){
            //判断时间
            $where .= " and create_time between {$startTime} and  {$endTime}";
        }
        if( $groupId ){
            $where .= " and group_id = ".$groupId;
        }
        $sql = "select * from {$this->tableName} where {$where}";
        
        //执行

        $result = mysqli_query($conn,$sql);
        //获取数据
        // return mysqli_fetch_all($result);
        $list = Array();
        while( $row=mysqli_fetch_assoc($result) ){
            $list[] = $row;
        }
        return $list;
    }
    //添加消息
    public function add($userid,$content,$toUserId,$groupId){
        
        //创建连接
        $conn = $this->mySql->link;
        //写sql,执行sql
        $sql = "insert into {$this->tableName} (content,create_time,send_user_id,
            to_user_id,status,read_time,group_id) values (&#39;{$content}&#39;,".time().",{$userid},
                {$toUserId},0,0,".$groupId.") ";
        //执行
        $result = mysqli_query($conn,$sql);
        if( $result ){
            return true;
        }else{
            return false;
        }
        
        
    }

}
?>

model/User.class.php


<?php
//引入UserLoginInfo
require_once  "MySql.class.php";
require_once "UserLoginInfo.class.php";
require_once "Message.class.php";
class User{
    //属性:id,姓名,账号,密码,登录时间
    public $id = "";//id
    public $name = "";//姓名
    public $username = "";//账号
    public $password = "";//密码
    public $mySql = "";
    public $tableName = "qq_msg";
   
    public function __construct($id,$name,$username,$password){
        //初始化对象
        $this->id = $id;
        $this->name = $name;
        $this->username = $username;
        $this->password = $password;
        $this->mySql = new MySql();
    }
   

    public function login( $inputUsername,$inputPassword ){
        //登录逻辑
        //判断用户名和密码是否正确
        if( $inputUsername != $this->username ||
            $inputPassword !=$this->password){
            return array("msg"=>"用户名或者账号错误");
        }
        //登录成功
        $logintime = time();
        // echo $this->name."使用账号:{$inputUsername}和密码{$inputPassword}登录了,
        //     登录时间为:".date(&#39;Y-m-d H:i:s&#39;,$logintime);
        //将登录信息保存到数据库
        $logininfo = new UserLoginInfo();
        $result = $logininfo->save($this->id);
        return $result;
    }
    //查看消息 
    public function getMessage($startTime,$endTime,$groupId){
        //查看消息相当于通过查看这个动作和消息进行了互动
        //所以通过方法的调用来执行
        $messageModel = new Message();
        return $messageModel->getMsgList($this->id,&#39;&#39;,$startTime,$endTime,$groupId);
        
    }
    //发送消息相当于通过查看这个动作和消息进行了互动
    public function sendMessage($content,$toUserId,$groupId){
         //所以通过方法的调用来执行
        $messageModel = new Message();
        return $messageModel->add($this->id,$content,$toUserId,$groupId);
    }
    
}
?>

model/UserGroupRelation.class.php

<?php
require_once "Mysql.class.php";
class UserGroupRelation{
    // 属性:id,创建会员,群名称,群的创建时间
    public $id = "";
    public $userid = "";
    public $groupName = "";
    public $createTime = "";
    public $mySql = "";
    public $tableName = "qq_user_group_relation";
    public function __construct(){
        $this->mySql = new MySql();
    }
    
    //1.获取一个群里所有的会员 根据群获取会员
    public function getUserList($groupid){
        //创建连接
        $conn = $this->mySql->link;
        //写sql,执行sql
       
        $sql = "select * from {$this->tableName }  where group_id={$groupid}";
        //执行
        $result = mysqli_query($conn,$sql);
        //获取数据
        // return mysqli_fetch_all($result);
        $list = Array();
        while( $row=mysqli_fetch_assoc($result) ){
            $list[] = $row;
        }
        return $list;
    }
    //2.根据某个会员获取他所有的群
    public function getGroupList($userid){
        //创建连接
        $conn = $this->mySql->link;
        //写sql,执行sql
       
        $sql = "select * from {$this->tableName }  where user_id={$userid}";
        //执行
        $result = mysqli_query($conn,$sql);
        //获取数据
        // return mysqli_fetch_all($result);
        $list = Array();
        while( $row=mysqli_fetch_assoc($result) ){
            $list[] = $row;
        }
        return $list;
    }
    
}
?>

model/UserLoginInfo.class.php

<?php
require_once "Mysql.class.php";

class UserLoginInfo{
    //属性:id,会员id,登录时间
    public $id = "";//id
    public $userid = "";//姓名
    public $loginTime = "";//登录时间
    public $mySql = "";
    public $tableName = "qq_user_login_record";
    public function __construct(){
        $this->mySql = new MySql();
    }
    //方法:
    public function save( $userid ){
        //添加用户登录记录
        $logintime = time();
        //保存到数据库
        //创建连接
        $conn = $this->mySql->link;
        //写sql执行sql
        $sql = "insert into ".$this->tableName.
            "(user_id,login_time) values({$userid}, {$logintime} )";
      
        //执行
        $result = mysqli_query($conn,$sql);
        //这种增,删,改的动作返回的结果是一个数字 1表示成功
        if( $result ){
            return true;
        }else{
            return false;
        }
        
    }
    //获取用户最后登录信息
    public function getLastLoginInfo($userid){
        //创建连接
        $conn = $this->mySql->link;
        //写sql执行sql
        $sql = "select * from ".$this->tableName.
            " where user_id={$userid} order by id desc limit 2";
   
        //执行
        $result = mysqli_query($conn,$sql);
        //获取数据
        $lastLoginInfo = mysqli_fetch_assoc($result);
        
        return $lastLoginInfo;
    }
}
?>

3. Processus d'écriture

Créer index.php


<?php
//业务代码
require_once "model/Message.class.php";
require_once "model/User.class.php";
require_once "model/UserGroupRelation.class.php";
require_once "model/UserLoginInfo.class.php";

//张三登录
$zhangsan = new User(1,"张三","a","b");
// //登录
$zhangsan->login("a","b");
echo $zhangsan->name."使用账号a和密码b 登录了<br/><br/>";
//输出最后登录时间
$logininfoModel = new UserLoginInfo();
//获取最后登录信息
$lastLoginInfo = $logininfoModel->getLastLoginInfo($zhangsan->id);
$lastLoginTime = date("Y-m-d H:i:s",$lastLoginInfo[&#39;login_time&#39;]);

echo $zhangsan->name."最后登录时间为".$lastLoginTime."<br/><br/>";
// 2.张三查看了 1个小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
$startTime= strtotime("-1 hour");
$endTime = time();
$msglist = $zhangsan->getMessage($startTime,$endTime,1);//查看行为
echo "张三查看了 1小时内的行政部门群的信息<br/><br/>";
echo "<b>张三看到的信息是</b></br/><br/>";
//3.输出张三看到的这些信息
// print_r($msglist);
foreach( $msglist as $msg ){
       echo "【发送人id】:".$msg["send_user_id"]."【内容】:".$msg["content"]."<br/>";
}
echo "<br/><br/>";
//4.突然张三收到好友李四的信息:信息叫:张三,你在干嘛
//相当于是李四给张三发送了消息
$lisi = new User(2,"李四","lisi","123456");
$lisi->sendMessage("张三,我是李四,你在干嘛",$zhangsan->id,2);
echo "李四发了信息给张三,说“张三,我是李四,你在干嘛”<br/><br/>";
//5.张三回复李四:我在想你呀
$zhangsan->sendMessage("我在想你呀",$lisi->id,2);
echo "张三回复了李四,说“我在想你呀”";
?>

Les résultats en cours sont les suivants :

Zhang San s'est connecté en utilisant le compte a et le mot de passe b


La dernière heure de connexion de Zhang San était le 2020-06-01 12:40:20

Zhang San a vérifié les informations du groupe du département administratif dans l'heure

Les informations vues par Zhang San étaient

[ID de l'expéditeur] : 3[Contenu] : Zhang San, Je suis Wang Wu


Li Si a envoyé un message à Zhang San, disant "Zhang San, je suis Li Si, qu'est-ce que tu fais"

Zhang San a répondu à Li Si, disant " Je pense à toi”

Jetons un coup d'œil aux changements dans les tables de la base de données

Les données du tableau d'informations de connexion ont augmenté

222Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Les données du tableau des messages ont été augmentées

111Analyse de code dun simple cas de discussion de groupe QQ (implémentation PHP)

Résumé :


1 Explication d'une simple connexion de membre QQ. scénario de discussion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn