[英]OOP PHP PDO My First Project , Am I doing right?
我正在尝试学习OOP PHP和PDO,目前有点混乱。 阅读大量文章后,我决定创建我的第一个项目,这是我的代码。
class db{
private static $instance = NULL;
private static $DSN = 'mysql:host=localhost;dbname=firstproject';
private function __construct(){
}
public static function getInstance(){
if(!self::$instance){
self::$instance = new PDO(self::$DSN,'root','');
self::$instance->exec('SET NAMES utf8');
}
return self::$instance;
}
public function reg_insert($usr_name,$usr_password){
self::$instance->query("INSERT INTO users VALUES(null,'$usr_name','$usr_password')");
}
}
class insRegInfo{
private $username;
private $password;
public function __construct($username,$password){
$dbe = db::getInstance();
db::reg_insert($username,$password);
}
}
if(isset($_POST['register'])){
$reg = new getRegInfo($_POST['username'],$_POST['password']);
}
<head>
<title>PDO Database Project</title>
</head>
<body>
<form action="" method="post">
<p>
<label>User Name</label>
<input type="text" name="username"/>
</p>
<p>
<label>Password</label>
<input type="password" name="password"/>
</p>
<p>
<input type="submit" name="register" value="Register" />
</p>
</form>
</body>
如您所见,这是一个简单的注册系统。 我的问题是,在这样的另一个类中调用数据库类,这是一种正确的方法,还是应该将insert函数携带到数据库类中,或者我需要使用Extended方法将db类定义为父类,将insRegInfo定义为子类?
哪种方法更好还是仅取决于我?
我将从使用模型/映射器开始。 这是获取简单对象并将其持久化到数据库的一种非常简单的方法。 它还避免将数据库调用和代码(持久性逻辑)与功能(应用程序或业务逻辑)混在一起。 简单的例子:
class User {
public $id;
public $username;
}
class UserMapper {
/**
* @param User $user
*/
public function save(User $user) {
if(isset($user->id)) {
$statement = "Update users set username = ? where id = ?"
} else {
$statement = "insert into users set username = ?, id = ?"
}
$instance = db::getInstance();
$sth = $instance->prepare($statement );
$values_a = array($user->username, $user->id);
$db_result = $sth->execute($values_a);
}
/**
* @param int $userId
* @return User
*/
public function load($userId) {
$statement = "select * from users where id = ?";
$instance = db::getInstance();
$sth = $instance->prepare($statement );
$values_a = array($user->id);
$db_result = $sth->execute($values_a);
$returnUser = new User();
$returnUser ->id = $db_result[0]['id'];
$returnUser ->username = $db_result[0]['username'];
return $returnUser;
}
}
我还建议您使用getters / setter代替直接成员访问,但这只是为了简化代码...随着开发更多的模型/映射器,您会发现常见的映射器功能(保存,加载,删除,查找),并且可以重构您的代码以包含通用逻辑,因此您没有一堆copypasta。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.