php实现@
PHP 实现 @ 功能
在 PHP 中实现类似社交平台中的 @ 功能(即提及用户并通知)需要结合字符串处理、数据库查询和通知机制。以下是具体实现方法:
字符串解析与提取 @ 用户名
使用正则表达式匹配文本中的 @ 用户名:

$text = "Hello @user1 and @user2!";
preg_match_all('/@(\w+)/', $text, $matches);
$mentionedUsers = $matches[1]; // 获取 ['user1', 'user2']
验证用户是否存在
查询数据库验证被 @ 的用户是否存在:
$validUsers = [];
foreach ($mentionedUsers as $username) {
$user = $db->query("SELECT id FROM users WHERE username = ?", [$username])->fetch();
if ($user) {
$validUsers[] = $user['id'];
}
}
存储提及记录
在数据库表中存储提及关系(例如 mentions 表):

$postId = 123; // 当前内容ID
foreach ($validUsers as $userId) {
$db->query("INSERT INTO mentions (user_id, post_id) VALUES (?, ?)", [$userId, $postId]);
}
发送通知
通过系统通知或邮件通知被提及的用户:
foreach ($validUsers as $userId) {
$notification = new Notification();
$notification->send($userId, 'You were mentioned in a post!');
}
前端实现(可选)
使用 JavaScript 实现输入时的自动补全:
$('input').on('keyup', function(e) {
if (e.key === '@') {
showUserDropdown(); // 显示用户选择下拉框
}
});
数据库表结构示例
CREATE TABLE mentions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
post_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (post_id) REFERENCES posts(id)
);
安全性注意事项
- 对用户输入进行转义防止 XSS 攻击
- 使用预处理语句防止 SQL 注入
- 限制高频 @ 操作防止滥用
性能优化建议
- 为
mentions表的user_id和post_id添加索引 - 对高频提及用户采用缓存机制
- 使用队列处理批量通知发送






