ホームページ >データベース >mysql チュートリアル >オブジェクト指向プログラミングでクラス内の外部変数 (データベース オブジェクトなど) にアクセスするにはどうすればよいですか?

オブジェクト指向プログラミングでクラス内の外部変数 (データベース オブジェクトなど) にアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-18 00:27:08745ブラウズ

How Can I Access External Variables (e.g., a Database Object) Within a Class in Object-Oriented Programming?

オブジェクト指向プログラミングでの外部リソースへのアクセス: ベスト プラクティス

オブジェクト指向プログラミングでは、クラス内のデータのカプセル化が重視されます。 ただし、クラスがデータベースなどの外部リソースと対話する必要があるシナリオがよく発生します。この記事では、ページネーション クラスを例として、クラス内でデータベース オブジェクトなどの外部変数にアクセスするという課題について説明します。

チャレンジ

クラス内から外部データベース オブジェクトに直接アクセスすると、「非オブジェクトに対するメンバー関数 query() の呼び出し」のようなエラーが発生する可能性があります。 これは、構造化されたアプローチの必要性を強調しています。

効果的なソリューション

外部依存関係を管理するための 2 つの堅牢な方法が存在します。

  1. コンストラクターの注入: 推奨されるアプローチは、コンストラクターを介してデータベース オブジェクトをクラスに注入することです。これにより、オブジェクトがすべてのクラス メソッドですぐに利用できるようになります。
<code class="language-php">class Paginator {    
    protected $db;

    public function __construct(DB_MySQL $db) {
        $this->db = $db;
    }

    public function get_records($q) {
        $x = $this->db->query($q);
        return $this->db->fetch($x);
    }

}</code>
  1. メソッド インジェクション: あるいは、データベース オブジェクトを、それを必要とするメソッドに直接渡します。
<code class="language-php">class Paginator
{
    public function get_records($q, DB_MySQL $db) {
        $x = $db->query($q);
        return $db->fetch($x);
    }

}</code>

グローバル変数を避ける理由

依存性の注入は、グローバル変数の使用を大幅に上回ります:

  • 依存関係のクリア: メソッド シグネチャは依存関係を明示的にリストし、コードの可読性と保守性を向上させます。
  • 結合の低減: 依存関係の挿入により疎結合が促進され、柔軟性が強化され、コードの適応が容易になります。
  • テスト容易性の強化: 依存関係を挿入すると、モック オブジェクトの使用が可能になり、単体テストが簡素化されます。

これらの手法を採用することで、開発者はオブジェクト指向プログラム内の外部依存関係を効果的に管理でき、その結果、よりクリーンで保守性が高く、テストしやすいコードが得られます。

以上がオブジェクト指向プログラミングでクラス内の外部変数 (データベース オブジェクトなど) にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。