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 ?
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 :
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!