Maison > Article > développement back-end > Analyse de code d'un simple cas de discussion de groupe QQ (implémentation PHP)
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
Créer la table qq_group. groupe de membres de la table
Créer une table de messages qq_msg
Créer une table d'adhésion qq_user
Créer la table qq_user_group_relation membre et table de relations de groupe
Créer la table qq_user_login_record table d'enregistrement des informations de connexion des membres
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).
2. Il existe 2 groupes de département administratif, groupe d'amis (qq_group) 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).
Afin d'avoir des messages dans le groupe administratif, on essaie d'abord d'ajouter un enregistrement dans la table des messages
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"=>'mysql', "hostname"=>"127.0.0.1", "database"=>"qq", "username"=>"root", "password"=>"root" ); $this->link = mysqli_connect($config['hostname'],$config['username'], $config['password'],$config['database']); } } ?>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=''){ //创建连接 $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 ('{$content}',".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('Y-m-d H:i:s',$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,'',$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['login_time']); 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 bJetons un coup d'œil aux changements dans les tables de la base de donnéesLes données du tableau d'informations de connexion ont augmenté Les données du tableau des messages ont été augmentées Résumé :
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”
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!