"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-21
Parcourir:901

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

Utilisation de variables globales au sein d'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 résoudre 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épendance

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 directement à l'objet de base de données.

Méthode d'injection

Une autre option consiste à injecter l'objet de base de données dans le méthode 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 offre plus de flexibilité lorsque plusieurs méthodes ont des exigences de base de données différentes.

Avantages de l'injection de dépendances

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

  • Dépendances explicitement définies : Il indique clairement quels objets dépendent des autres, éliminant ainsi dépendances cachées.
  • Couplage lâche : La classe peut facilement basculer vers un objet de base de données différent ou simulé à des fins de tests.
  • Testabilité : Tests unitaires peut 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 changements majeurs dans le code.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3