ホームページ > データベース > mysql チュートリアル > PHP のクラスメソッド内のグローバル変数にアクセスするにはどうすればよいですか?

PHP のクラスメソッド内のグローバル変数にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-18 00:30:09
オリジナル
212 人が閲覧しました

How Can I Access Global Variables Inside Class Methods in PHP?

PHP クラス メソッド内の外部変数へのアクセス

クラスメソッド ($db クラスの get_records など) 内からグローバル変数 (pagi) に直接アクセスしようとすると、エラーが発生します。これは変数のスコープによるものです。グローバル変数は、クラス メソッド内では自動的に使用できません。 解決策には、変数をクラスに明示的に渡すことが含まれます。

解決策: 依存関係の注入

最良のアプローチは依存関係の注入です。これには、必要なオブジェクト (この場合はデータベース オブジェクト) を引数としてクラス コンストラクターに渡すか、メソッドに直接渡すことが含まれます。これにより、クラスがグローバル変数から独立した状態に保たれ、コードの保守性とテスト性が向上します。

方法 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);
    }
}

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

方法 2: メソッドに直接注入する

あるいは、データベース オブジェクトをメソッドに直接渡すこともできます。

<code class="language-php">class Paginator
{
    public function get_records($q, DB_MySQL $db)
    {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db); // Pass DB object to method</code>
ログイン後にコピー

推奨事項: コンストラクターインジェクション

どちらの方法も機能しますが、一般的にはコンストラクター注入 (方法 1) が推奨されます。これにより疎結合が促進され、コードがよりモジュール化され、テスト可能になり、保守が容易になります。 直接メソッド インジェクション (方法 2) を使用すると、コードが読みにくくなり、リファクタリングが困難になる可能性があります。 可能な限りグローバル変数に依存しないようにしてください。

以上がPHP のクラスメソッド内のグローバル変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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