Php 用户类组合函数
我最近开始阅读有关类和函数的内容,以便为我所属的在线游戏社区创建一个用户系统。我目前有三个表为我提供用户数据:部门、等级和用户 用户表如下所示:Php 用户类组合函数,php,sql,pdo,Php,Sql,Pdo,我最近开始阅读有关类和函数的内容,以便为我所属的在线游戏社区创建一个用户系统。我目前有三个表为我提供用户数据:部门、等级和用户 用户表如下所示: user_id | user_name | char_name | email | password | rank_id rank_id | rank_name | div_id div_id | div_name 排名表类似于: user_id | user_name | char_name | email | password | rank_
user_id | user_name | char_name | email | password | rank_id
rank_id | rank_name | div_id
div_id | div_name
排名表类似于:
user_id | user_name | char_name | email | password | rank_id
rank_id | rank_name | div_id
div_id | div_name
分区表如下所示:
user_id | user_name | char_name | email | password | rank_id
rank_id | rank_name | div_id
div_id | div_name
大约有100个军衔,每个军衔在一个特定的师中。例如,等级1-5为1级,等级6-10为2级,依此类推
下面是旧代码
我创建了一个User类,其中包含一些函数来获取我需要的数据,但我觉得我做得不对,因为使用了很多SELECT语句,我在测试页面上调用了所有三个函数来获取数据
我的用户课程如下:
require_once('dbcon.php');
class User {
public static function all_users() {
global $conn;
$records = $conn->prepare('SELECT * FROM users');
$records->execute();
$results = $records->fetchAll(PDO::FETCH_ASSOC);
return $results;
}
public static function by_id($userid=0) {
global $conn;
$records = $conn->prepare('SELECT * FROM users WHERE user_id = :userid');
$records->bindParam(':userid', $userid);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
return $results;
}
public static function get_rank($userid=0) {
global $conn;
$records = $conn->prepare('SELECT * FROM users WHERE user_id = :userid');
$records->bindParam(':userid', $userid);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
$rankid = $results['rank_id'];
$records2 = $conn->prepare('SELECT * FROM ranks WHERE rank_id=:rankid');
$records2->bindParam(':rankid', $rankid);
$records2->execute();
$results2 = $records2->fetch(PDO::FETCH_ASSOC);
return $results2['rank_name'];
}
public static function get_div($userid=0) {
global $conn;
$records = $conn->prepare('SELECT * FROM users WHERE user_id = :userid');
$records->bindParam(':userid', $userid);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
$rankid = $results['rank_id'];
$records2 = $conn->prepare('SELECT * FROM ranks WHERE rank_id=:rankid');
$records2->bindParam(':rankid', $rankid);
$records2->execute();
$results2 = $records2->fetch(PDO::FETCH_ASSOC);
$divid = $results2['div_id'];
$records3 = $conn->prepare('SELECT * FROM divisions WHERE div_id = :divid');
$records3->bindParam(':divid', $divid);
$records3->execute();
$results3 = $records3->fetch(PDO::FETCH_ASSOC);
return $results3['div_name'];
}
}
我获取个人数据的测试页面是:
require_once('inc/dbcon.php');
require_once('inc/user.php');
echo "<strong>ALL USERS</strong><br><br>";
$users = User::all_users();
foreach ($users as $user) {
$rank = User::get_rank($user['user_id']);
$div = User::get_div($user['user_id']);
echo "User Name: " . $user['user_name'] . ".<br>";
echo "Character Name: " . $user['char_name'] . ".<br>";
echo "Rank: " . $rank . ".<br>";
echo "Division: " . $div . ".<br>";
echo "<br><br>";
}
echo "<strong>USER 1</strong><br><br>";
$singleuser = User::by_id(1);
$rank = User::get_rank($singleuser['user_id']);
$div = User::get_div($singleuser['user_id']);
echo "User Name: " . $singleuser['user_name'] . ".<br>";
echo "Character Name: " . $singleuser['char_name'] . ".<br>";
echo "Rank: " . $rank . ".<br>";
echo "Division: " . $div . ".<br>";
DB.CLASS.PHP
USER.CLASS.PHP
我已经在一个测试文件中测试了上述内容
TEST.PHP
根据其中一条评论的要求,以下是表格和一些示例数据。同样,一切都按预期进行。我只是想回答问题1和2,看看这个设置是否正确。这是有限的测试数据。大约有100个等级,将有大约100个用户
根据用户的排名id,他们将拥有适当的排名名称,并进入相应的部门。请全球用户不要插手……谢谢,我想?我将研究为什么不应该使用globals。除此之外。。。关于如何压缩/使其更好,还有其他帮助吗?我使用测试数据将SQL转储添加到编辑中,以便您可以根据需要查看它。我主要只需要回答新的问题1和2,以确保这个系统是合理的,并且结构正确,因为原始代码已经过时了。DDL还可以,mysql没有什么可以做的(数据规范化似乎是正确的)。但是你的代码还是一团糟。使用常量更改其状态的类与全局变量一样糟糕。看看依赖倒置原理。数据库有一个状态(已连接、已断开连接等)。使用连接的类也有状态。静态方法应该是无状态的(通常是无状态的,有一些例外)。在codereview.stackexchange.com上你可能会更走运