ホームページ  >  に質問  >  本文

他のクラスでPDO接続を使用するにはどうすればよいですか?

OOP がどのように機能するかを理解するのに問題があると思います。動作するようにコードを変更しましたが、それは私が考える正しい方法ではありません。次のシナリオ (いいえ、ユーザー ログインを自分で作成しているわけではありません。実際には、ローカルの開発者が OOP をよりよく理解するためだけのものです):

database.php ファイルがあります:

リーリー

したがって、このクラスではデータベース接続を作成し、その接続 (オブジェクト?) を返します。

次に、2 番目のクラス、有名な User クラスを用意します (実際には自動読み込みを使用しませんが、私はそれについて知っています):

リーリー

これらは私の 2 つのコースです。ご覧のとおり、大したことはありません。ここで、関数名

login に混乱しないでください。実際には、データベースからいくつかのユーザー名とユーザーメールを選択して表示しようとしているだけです。私はこれを次のようにして達成しようとします: リーリー

ここで問題が発生します。このコードを実行すると、次のエラー メッセージが表示されます:

キャッチされないエラー: 未定義のメソッド Database::prepare() の呼び出し

そして、このエラーの原因を本当に理解しているのかわかりません。

以下を変更すると、コードは正常に実行されます:

database.php の

$conn を private ではなく public に変更します (これはダメだと思います...? ただし、private にすると、データベース クラスでのみ実行できます。クエリは内部で実行されます)そうですか? では、これらのクエリはすべてデータベース クラスに入れる必要がありますか? これは良くないと思います。なぜなら、大きなプロジェクトでは非常に大きくなるからです。)

2 番目に加えたい変更は次のとおりです。 user.php ファイルの

$this->conn->prepare$this->conn->conn->prepare に変更します。ここでは本当に理由がわかりません。

つまり、

user.php のコンストラクターには $this->conn = new Database() があり、new Database は DB クラスによって返されるため、接続オブジェクト、なぜ 2 つ目の conn-> が必要なのか本当にわかりません。

P粉548512637P粉548512637332日前629

全員に返信(1)返信します

  • P粉268284930

    P粉2682849302023-10-24 09:06:16

    • Database クラスなどのクラスは役に立たないので作成しないでください。 PDO に追加機能を追加する場合、データベース ラッパーを作成することは理にかなっています。ただし、現在のコードを考えると、プレーン PDO を使用する方が良いでしょう。
    • プレーン PDO またはデータベース クラスから 単一の $db インスタンスを作成します。
    • データベース接続を必要とするすべてのクラスにコンストラクター パラメーターとして渡します

    データベース.php:

    リーリー

    user.php

    リーリー

    app.php

    リーリー

    出力:

    リーリー

    PDO の詳細については、私の (唯一正しい) PDO チュートリアル をご覧ください。

    返事
    0
  • キャンセル返事