"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo evitar las variables globales al acceder a un objeto de base de datos dentro de una clase?

¿Cómo evitar las variables globales al acceder a un objeto de base de datos dentro de una clase?

Publicado el 2024-12-21
Navegar:685

How to Avoid Global Variables When Accessing a Database Object within a Class?

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:

  • Dependencias explícitamente definidas: Deja claro qué objetos dependen de otros, eliminando objetos ocultos. dependencias.
  • Acoplamiento flexible: La clase puede cambiar fácilmente a un objeto de base de datos diferente o simulado para fines de prueba.
  • Testabilidad: Las pruebas unitarias pueden céntrese únicamente en la clase sin interferir con la funcionalidad de la base de datos.
  • Extensibilidad: Permite el uso de múltiples bases de datos u otros marcos sin mayor cambios de código.
Último tutorial Más>

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