클래스 내에서 전역 변수 사용
페이지 매김 기능을 생성하려면 클래스 내에서 데이터베이스 개체에 액세스해야 합니다. 그러나 클래스 내부의 외부 변수에 액세스하려고 하면 오류가 발생할 수 있습니다. 이 문제를 처리할 수 있는 가능한 솔루션을 살펴보겠습니다.
"객체가 아닌 멤버 함수 query() 호출"이라는 치명적인 오류를 해결하려면 클래스 내에서 데이터베이스 객체에 액세스할 수 있어야 합니다. 전역 변수를 사용하는 대신, 더 적절한 접근 방식은 데이터베이스 개체를 클래스나 해당 메서드에 주입하는 것입니다.
종속성 주입
한 가지 방법은 데이터베이스를 주입하는 것입니다. 아래와 같이 클래스 생성자에 객체를 추가합니다:
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); } }
이를 통해 페이지 매김 클래스가 데이터베이스 객체에 직접 액세스할 수 있습니다.
메서드 주입
또 다른 옵션은 데이터베이스 객체를 특정 클래스에 주입하는 것입니다. 이를 요구하는 메소드:
$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); } }
이는 여러 메서드에 다양한 데이터베이스 요구 사항이 있을 때 더 많은 유연성을 제공합니다.
종속성 주입의 이점
전역 변수를 사용하는 것과 비교하여 종속성 주입은 다음을 제공합니다. 몇 가지 장점:
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3