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