1

私はOOPに比較的慣れていないので、ウェブサイトをgithubのSafemysql https://github.com/colshrapnel/safemysqlに適応させようとしています。

OOP に基づいてさらにコードを作成する前に、解決しなければならないなぞなぞに出くわしました。

私の Web サイトには、データベース ユーザーのさまざまなリストを照会する管理セクションがあります。User クラスに対する私の最初の試みは

class User {
    function __construct($user_id) {
        $this->dbs  = new SafeMySQL(); 
        $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i', $user_id);
    }
    function get_something_else() { }
    function calculate_this() { }
}

foreach (array as $user_id) {
    $user = new User($user_id);
}    

この最初の方法を使用すると、何百もの結果のページがある場合、同じ数の接続を作成するだけでよいことがわかります。そのため、ユーザー クラスを使用する方法をさらに 2 つ考えました。

class User {
    function __construct() {
        $this->dbs = new SafeMySQL(); 
    }
    function load_user($user_id) {
        $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i',$user_id);
        $return $this->user
    }
    function get_something_else() { }
    function calculate_this() { }
}

$data = new User();

foreach (array as $user_id) {
    $user = data->load_user($user_id);
}

このクラスを使用しても問題はありませんでしたが、誤って別のユーザーに永続化される変数を定義してしまうのではないかと考え続けています。

私が考えたもう 1 つの代替案は、自分の接続を定義し、それをこのようなクラスに使用すること $user = new User($user_id, $connection)でしたが、今では見栄えがよくありません。

現在、グローバル接続と永続接続について調べていますが、それらを推奨していない人もいます。

私のユーザークラスを書くための最良の方法は何ですか?

4

2 に答える 2

0

コンストラクターのパラメーターに接続を含めることについてあなたが持っていたアイデアは、良いものだと思います。この概念は「依存性注入」と呼ばれます。依存性注入の目的は、DBMS をアプリケーション ロジックから分離することです。これにより、いつか SafeMySQL を使用しないことに決めた場合に、User クラスを変更せずに別の接続を渡すことができます (SafeMySQL の周りにインターフェイスを記述する必要があります)。それを達成するためのクラス)。この場合、アプリケーション ロジックに依存せずに DBMS への接続を管理できるという追加の利点があります。

于 2013-05-31T20:30:19.137 に答える
0

最適な方法は、それを必要とするページでデータベース接続を作成し、それをユーザー クラスのコンストラクターに変数として渡して使用することだと思います。すでにこれを試したことがあると思いますが、これが最善の方法です。

例:

index.php

$dbs = new SafeMySQL();
$user = new User($dbs, 1);

ユーザー.php

class User {
      function __construct($dbs, $user_id){
          $this->dbs = $dbs;
          $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i',$user_id);
       }
}
于 2013-05-30T22:36:13.150 に答える