Dans votre code, vous rencontrez une erreur lorsque vous essayez d'accéder à une variable définie en dehors de la classe au sein d'une méthode de classe. Ce problème se pose car l’accès aux variables globales directement depuis une classe n’est généralement pas recommandé en PHP. Cependant, il existe quelques méthodes pour y parvenir :
L'approche privilégiée consiste à implémenter l'injection de dépendances. Cela implique de transmettre l'objet de base de données comme argument au constructeur de classe, permettant à la classe d'accéder et d'utiliser la variable sans avoir besoin d'une portée globale.
class Paginator { private $db; public function __construct(DB_MySQL $db) { $this->db = $db; } // ... } // Usage: $db = new DB_MySQL("localhost", "root", "", "test"); $pagination = new Paginator($db);
Alternativement , vous pouvez injecter l'instance de base de données directement dans la méthode qui la nécessite.
class Paginator { public function get_records($q, DB_MySQL $db) { // ... } } // Usage: $pagination = new Paginator(); $pagination->get_records("SELECT * FROM `table`", $db);
Bien que cela soit généralement déconseillé, vous pouvez utiliser le mot-clé global pour accéder aux variables globales au sein d'une méthode de classe. Cependant, cette technique peut encombrer le code et le rendre moins maintenable.
class Paginator { public function get_records($q) { global $db; // ... } } // Usage: $db = new DB_MySQL("localhost", "root", "", "test"); $pagination = new Paginator();
N'oubliez pas que l'utilisation de variables globales à partir d'une classe présente des inconvénients potentiels, notamment des problèmes de dépendance, une testabilité réduite et des problèmes de clarté du code. Par conséquent, il est recommandé d'envisager l'injection de dépendances ou l'injection d'instances dans des méthodes lors de l'accès à des variables depuis l'extérieur d'une classe en PHP.
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!