Maison > base de données > tutoriel mysql > Comment puis-je accéder aux variables globales dans les méthodes de classe en PHP ?

Comment puis-je accéder aux variables globales dans les méthodes de classe en PHP ?

Susan Sarandon
Libérer: 2025-01-18 00:30:09
original
212 Les gens l'ont consulté

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

Accès aux variables externes dans les méthodes de classe PHP

Tenter d'accéder directement à une variable globale ($db) à partir d'une méthode de classe (par exemple, get_records dans la classe pagi) entraîne une erreur. Cela est dû à une portée variable ; les variables globales ne sont pas automatiquement disponibles dans les méthodes de classe. La solution consiste à transmettre explicitement la variable dans la classe.

Solution : Injection de dépendances

La meilleure approche est l’injection de dépendances. Cela implique de transmettre l'objet nécessaire (dans ce cas, l'objet de la base de données) en argument au constructeur de classe ou directement à la méthode. Cela maintient la classe indépendante des variables globales, améliorant ainsi la maintenabilité et la testabilité du code.

Méthode 1 : Injection via Constructeur

<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>
Copier après la connexion

Méthode 2 : injecter directement dans la méthode

Vous pouvez également transmettre l'objet de base de données directement à la méthode :

<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>
Copier après la connexion

Recommandation : Injection de constructeur

Bien que les deux méthodes fonctionnent, l'injection de constructeur (méthode 1) est généralement préférée. Il favorise le couplage lâche, rendant le code plus modulaire, testable et plus facile à maintenir. L'injection de méthode directe (méthode 2) peut rendre le code moins lisible et plus difficile à refactoriser. Évitez de vous fier à des variables globales autant que possible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal