OOP PHP PDO我的第一个项目,我做对吗? [英] OOP PHP PDO My First Project , Am I doing right?

查看:91
本文介绍了OOP PHP PDO我的第一个项目,我做对吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着学习OOP PHP和PDO,现在有点混乱。阅读了大量的文章后,我决定创建我的第一个项目。这是我的代码。

I am trying the learn OOP PHP and PDO,it is a bit confusing for now. After reading lots of articles I decided to create my first project.And here is my code.



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>

一个简单的注册系统。
我的问题是,调用数据库类在另一个类像这样,是一个真正的方式,或者我应该携带插入函数到数据库类,或者也许我需要定义db类作为parent和insRegInfo作为child with extends方法

So as you see it is a simple registration system. My question is,calling database class in another class like that, is it a true way or should I carry the insert function to database class, or maybe I need to define db class as parent and insRegInfo as child with extends method?

哪种方式更好或者只是依赖于我?

Which way is better or is it just depends to me?

推荐答案

我会先使用model / mapper。这是一个非常简单的方法来获取纯对象,并能够将它们持久化到数据库。它还避免了将数据库调用和代码(持久性逻辑)与功能(应用程序或业务逻辑)混合在一起。简单示例:

I would start by using model/mapper. It's a very simple way to get plain objects and to be able to persist them to the database. It also avoids mixing database calls and code (persistence logic) in with functionality (application or business logic). Simple example:

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 / setters,直接成员访问,但这只是为了代码的简单...当你开发更多的模型/映射器,你会发现常见的映射器功能(保存,加载,删除,查找),你可以重构代码包含通用逻辑,所以你没有一堆copypasta。

I would also recommend using getters/setters, instead of direct member access, but this was just for simplicity of code... As you develop more models/mappers you will find common mapper functionality (saving, loading, deleting, finding) and you can refactor your code to contain the common logic so you don't have a bunch of copypasta.

这篇关于OOP PHP PDO我的第一个项目,我做对吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆