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!