Maison >développement back-end >tutoriel php >Comment éviter les variables globales lors de l'accès à un objet de base de données dans une classe ?

Comment éviter les variables globales lors de l'accès à un objet de base de données dans une classe ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 15:00:20168parcourir

How to Avoid Global Variables When Accessing a Database Object within a Class?

Utilisation de variables globales dans une classe

La création d'une fonctionnalité de pagination implique l'accès à un objet de base de données à partir d'une classe. Cependant, tenter d’accéder à une variable externe à l’intérieur de la classe peut entraîner des erreurs. Examinons les solutions possibles pour gérer ce problème.

Pour résoudre l'erreur fatale « Appel à une fonction membre query() sur un non-objet », l'objet de base de données doit être accessible au sein de la classe. Au lieu d'utiliser des variables globales, une approche plus appropriée consiste à injecter l'objet de base de données dans la classe ou ses méthodes.

Injection de dépendances

Une méthode consiste à injecter la base de données objet dans le constructeur de classe, comme indiqué ci-dessous :

include_once("pagi.php");

$db = new DB_MySQL("localhost", "root", "", "test"); // connect to the database

$pagination = new Paginator($db);
$records = $pagination->get_records("SELECT * FROM `table`");

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

Cela permet à la classe de pagination d'accéder à l'objet de base de données directement.

Injection de méthode

Une autre option consiste à injecter l'objet de base de données dans la méthode spécifique qui le nécessite :

$pagination = new Paginator();
$records = $pagination->get_records("SELECT * FROM `table`", $db);

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

Cela fournit plus flexibilité lorsque plusieurs méthodes ont des exigences de base de données variables.

Avantages de la dépendance Injection

Par rapport à l'utilisation de variables globales, l'injection de dépendances offre plusieurs avantages :

  • Dépendances explicitement définies : Elle indique clairement quels objets dépendent des autres , éliminant les dépendances cachées.
  • Couplage lâche : La classe peut facilement changer à un objet de base de données différent ou simulé à des fins de test.
  • Testabilité : Les tests unitaires peuvent se concentrer uniquement sur la classe sans interférer avec les fonctionnalités de la base de données.
  • Extensibilité : Il permet l'utilisation de plusieurs bases de données ou d'autres frameworks sans modifications majeures du code.

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