ホームページ > データベース > mysql チュートリアル > PHP クラス内の外部オブジェクトに適切にアクセスするにはどうすればよいですか?

PHP クラス内の外部オブジェクトに適切にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-18 00:10:38
オリジナル
573 人が閲覧しました

How Can I Properly Access External Objects Within a PHP Class?

クラスでグローバル変数を使用する

PHP では、global キーワードを使用してクラス内からグローバル変数にアクセスできます。ただし、これにより、コードの可読性と保守性の問題が発生する可能性があります。次のコード例を考えてみましょう:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库
include_once("pagi.php");

$pagination = new pagi();
$records = $pagination->get_records("SELECT * FROM `table`");</code>
ログイン後にコピー

ファイル内の pagi.php:

<code class="language-php">class pagi {

    public function get_records($q) {
        global $db;

        $x = $db->query($q);
        return $db->fetch($x);
    }

}</code>
ログイン後にコピー

このコードは、get_records メソッドの pagi クラス外の $db 変数を使用しようとしています。ただし、-> 演算子を介してグローバル変数にアクセスできないため、致命的なエラーが発生します。

依存関係の注入: より良い方法

外部オブジェクトにアクセスするより良い方法は、依存関係の注入です。このアプローチでは、外部オブジェクトがパラメーターとしてクラスのコンストラクターまたはメソッドに渡されます。例:

<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库
include_once("pagi.php");

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT the, fields, you, want, to retrieve FROM `table`");</code>
ログイン後にコピー
<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>
ログイン後にコピー

この場合、$db オブジェクトはコンストラクターを通じて Paginator クラスに渡されます。これにより、クラスは、グローバル変数として設定したり、クラス内に新しいインスタンスを作成したりせずに、$db オブジェクトを使用してクエリを実行できます。

結論

グローバル変数の使用は便利かもしれませんが、依存関係注入は、クラスに外部機能を追加するためのより柔軟で保守が容易な方法です。依存関係を明示的に渡すことにより、クラスを特定の実装から分離し、テストと保守が容易になります。

以上がPHP クラス内の外部オブジェクトに適切にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート