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
DDDoriginal
2024-12-07 03:08:141027parcourir

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

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

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!

Déclaration:
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