Uso de variables globales dentro de una clase
La creación de una funcionalidad de paginación implica acceder a un objeto de base de datos desde dentro de una clase. Sin embargo, intentar acceder a una variable externa dentro de la clase puede provocar errores. Profundicemos en las posibles soluciones para manejar este problema.
Para solucionar el error fatal "Llamar a una función miembro query() en un objeto que no es un objeto", el objeto de la base de datos debe ser accesible dentro de la clase. En lugar de utilizar variables globales, un enfoque más apropiado es inyectar el objeto de la base de datos en la clase o sus métodos.
Inyección de dependencia
Un método es inyectar la base de datos objeto en el constructor de la clase, como se muestra a continuación:
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); } }
Esto permite que la clase de paginación acceda al objeto de la base de datos directamente.
Método de inyección
Otra opción es inyectar el objeto de la base de datos en el objeto de base de datos específico método que lo requiere:
$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); } }
Esto proporciona más flexibilidad cuando varios métodos tienen diferentes requisitos de base de datos.
Beneficios de la inyección de dependencia
En comparación con el uso de variables globales, la inyección de dependencia ofrece varias ventajas:
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3