Usando variáveis globais dentro de uma classe
A criação da funcionalidade de paginação envolve acessar um objeto de banco de dados de dentro de uma classe. Entretanto, tentar acessar uma variável externa dentro da classe pode levar a erros. Vamos nos aprofundar nas soluções possíveis para lidar com esse problema.
Para resolver o erro fatal "Chamar uma função de membro query() em um não-objeto", o objeto do banco de dados precisa estar acessível dentro da classe. Em vez de usar variáveis globais, uma abordagem mais apropriada é injetar o objeto do banco de dados na classe ou em seus métodos.
Injeção de dependência
Um método é injetar o banco de dados objeto no construtor da classe, conforme mostrado abaixo:
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); } }
Isso permite que a classe de paginação acesse o objeto do banco de dados diretamente.
Method Injection
Outra opção é injetar o objeto do banco de dados no específico método que o requer:
$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); } }
Isso fornece mais flexibilidade quando vários métodos têm requisitos de banco de dados variados.
Benefícios da injeção de dependência
Em comparação ao uso de variáveis globais, a injeção de dependência oferece diversas vantagens:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3