1

編集:この質問は重複していません。理由は次のとおりです。私はOOPにまったく慣れていないため、これらの回答はどれも少しも役に立ちませんでした-私の理解レベルに合わせた回答が必要です。質問が似ているように見えるという理由だけで、質問者はそうではありません-言うまでもなく、私は最初に「理解できる」回答を具体的に要求しました。


私はまだPHP全体にかなり慣れており、オブジェクト指向PHPについてはさらに新しく、先週以内に自分自身を教育し始めたばかりであり、継承やクラス抽象化などのいくつかの概念をまだ理解できていません。しばらくの間、データベース接続とクエリを処理するために PDO を使用してきたので、かなり迅速に理解できましたが、それ以外はまだ OOPHP の初心者なので、質問がある場合はご容赦ください。少し「基本的」に思えます。

各 Web ページの上部に必要な初期化ファイル (init.php) があります。これは、とりわけ、PDO を使用して MySQL データベースに接続します。

試す {
    $dbh = new PDO(conn. data here);
} catch(PDOException $e) {
    echo $e->getMessage();
}

したがって、私が理解しているように、このコードを実行する$dbhと、PDO オブジェクトとしてインスタンス化されます。私のinit.phpファイルの一番下には、、、などの関数ファイルへのリンクが必要user.func.phpですimages.func.php

問題は、関数の 1 つからデータベースにクエリを実行する必要があるときはいつでも、次の$dbhように操作する前にグローバルとして宣言する必要があることです。

関数 myFunction {
    グローバル $dbh; // ここが問題です!

    試す {
        $stmt = $dbh->prepare(ここにいくつかの SQL);
        $stmt->execute();
    }キャッチ{
        //など。
    }
}

さて、問題は、なぜ私がグローバルとして宣言しなければならないのかを理解することではありません-私はそれを理解していますが、どうすればそれを回避できますか. グローバルを避ける理由についていくつかの StackOverflow の回答を読みましたが、その方法がわかりません。

global $dbhコードから削除するにはどうすればよいですか? データベース ハンドラ クラスを作成し、接続設定をインスタンス化するたびにコンストラクタ メソッドに渡し、代わりにそれを使用しますか? (少し冗長なようです)。

グローバル変数の使用を置き換える方法がよくわからないので、理解できるように助けていただければ幸いです。

4

0 に答える 0