他のクラスでPDO接続を使用するにはどうすればよいですか?
P粉548512637
P粉548512637 2023-10-23 09:37:51
0
1
693

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粉548512637
P粉548512637

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

データベース.php:

リーリー

user.php

リーリー

app.php

リーリー

出力:

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート