Maison > développement back-end > tutoriel php > Comment accéder correctement aux variables externes (comme un objet de base de données) dans une classe PHP ?

Comment accéder correctement aux variables externes (comme un objet de base de données) dans une classe PHP ?

DDD
Libérer: 2024-12-07 03:08:14
original
990 Les gens l'ont consulté

How to Properly Access External Variables (like a Database Object) within a PHP Class?

Utilisation de variables globales dans une classe

Vous essayez de créer une classe de pagination qui utilise une variable externe. Cependant, vous rencontrez une erreur : "Appel à une fonction membre query() sur un non-objet."

Le problème survient car la variable externe, $db, n'est pas directement accessible au sein de la classe. Pour résoudre ce problème, nous explorerons deux approches principales :

Approche 1 : Injection de dépendances

L'injection de dépendances consiste à transmettre l'objet de base de données en tant qu'argument au constructeur de la classe. Cette méthode garantit que la classe a accès à la dépendance nécessaire.

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

Approche 2 : Injection de méthode

Vous pouvez également transmettre l'objet de base de données en argument à la méthode spécifique qui l'exige. Cette approche est adaptée lorsque seules quelques méthodes ont besoin d'accéder à la dépendance.

class Paginator
{
    public function get_records($q, DB_MySQL $db)
    {
        $x = $db->query($q);
        return $db->fetch($x);
    }
}
Copier après la connexion

Le choix entre ces approches dépend de vos besoins spécifiques. L'injection de dépendances est préférable lorsque plusieurs méthodes nécessitent la dépendance, tandis que l'injection de méthodes convient à une utilisation limitée des dépendances.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal