0

最近、PHP のクラスと OOP 全般について、より真剣に調べ始めました。なるべく授業を活かしてシンプルなサイトを作ろうと思っているのですが、頭にこびりついた疑問がいくつかあります。

より具体的には、ユーザー、ページ、メニューなどを処理するクラスとメソッドで「適切な」サイト構造がどのように見えるかを知りたいです。現在、このラッパーを使用して MySQLi をより効果的に回避しています。他のオブジェクトでこのラッパーを実装する方法を決定する必要があるようです-ユーザー、メニューなどの新しいクラスを個別に作成し、インスタンスを作成するたびにクラスを介してデータベース変数を渡すだけですか?

$db = new Mysqlidb (DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
$user = new User ($db);

それとも、ラッパーの作成者がここで指摘したように、SQL クラスを「モデル」として拡張するだけですか。

また、一般的に、何をクラスのままにする必要がありますか? 関数のみで処理する必要があるのは何ですか? MySQL クラスをどのように処理すればよいですか?

すべてのメニュー項目/ユーザー/ページをオブジェクトとして扱うのは良い習慣ですか?

これらは、今私の心を混乱させているもののほんの一部です。Web 上には OOP に関するかなりの数の例がありますが、上記の質問を説明する適切な例はまだ見つかりません。

4

1 に答える 1

1

すでに mysqlidb に精通している場合、その 2.1 および 2.2 リリースには、いくつかの追加機能を備えたモデルを実装するための新しい dbObject クラスが付属しています。

https://github.com/avbdr/PHP-MySQLi-Database-Class/blob/master/dbObject.mdを確認してください。

それでも純粋な MysqliDb クラスに固執したい場合は、次のことを試すことができます。

class Model {
    protected $db;

    public function __constuct () {
        $this->db = MysqliDb::getInstance();
    }
    public function __call ($method, $arg) {
        call_user_func_array (array ($this->db, $method), $arg);
        return $this;
    }
}

class user extends Model {
    $this->tbl = 'users';
    public function create ($data) {
         $this->db->insert (...);
    }
    public function admins () {
         return $db->where ("role", "admin")->get($this->tbl);
    }
}

これにより、次のようなモデルが得られます。

$user = new user ();
$q = $user->where('login','root')->admins();

非常に単純な dbObject を見てください。必要な仕事をしてくれるに違いありません。

OOPに関しては、ほとんど静的なコンテンツをデータベースに保存することは避けます。メニュー/サイドバー/ヘッダー/などを個別のサブビューに分割するだけで問題ありません。

于 2015-08-02T09:32:41.060 に答える