집 >데이터 베이스 >MySQL 튜토리얼 >PHP 클래스의 데이터베이스에 액세스할 때 전역 변수를 방지하려면 어떻게 해야 합니까?
PHP 클래스에서 데이터베이스에 액세스할 때 전역 변수를 사용하지 마세요
pagi
클래스 메서드의 전역 변수 $db
에 액세스하는 동안 코드에서 오류가 발생했습니다. 이 오류는 query()
메서드가 객체가 아닌 개체에서 호출되었음을 나타냅니다. 이는 $db
변수를 클래스에서 사용할 수 없음을 나타냅니다.
의존성 주입 솔루션
이 문제를 해결하기 위해 권장되는 방법은 종속성 주입을 사용하고 전역 변수에 의존하는 대신 데이터베이스 개체를 매개변수로 클래스에 전달하는 것입니다. 예시는 다음과 같습니다.
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); include_once("pagi.php"); $pagination = new Paginator($db); $records = $pagination->get_records("SELECT * FROM `table`");</code>
<code class="language-php">class Paginator { private $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); } }</code>
이 예에서는 생성자를 통해 Paginator
개체를 종속성으로 전달하는 DB_MySQL
이라는 새 클래스를 만듭니다. 이렇게 하면 데이터베이스 인스턴스가 클래스에 주입되어 클래스 내의 메서드에서 사용할 수 있게 됩니다.
의존성 주입의 장점
종속성 주입을 사용하면 다음과 같은 장점이 있습니다.
DB_MySQL
클래스에 대한 직접적인 종속성에서 클래스를 분리하여 더 유연하고 테스트하기 쉽게 만듭니다. global
키워드를 사용하는 것과 달리 종속성 주입을 사용하면 클래스가 특정 종속성에 종속된다는 점을 명확하게 알 수 있습니다. 다른 방법
데이터베이스 개체에 액세스하는 또 다른 방법은 다음과 같이 해당 개체를 필요로 하는 메서드에 직접 삽입하는 것입니다.
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); include_once("pagi.php"); $pagination = new Paginator(); $records = $pagination->get_records("SELECT * FROM `table`", $db);</code>
<code class="language-php">class Paginator { public function get_records($q, DB_MySQL $db) { $x = $db->query($q); return $db->fetch($x); } }</code>
그러나 생성자를 통한 종속성 주입은 더 나은 캡슐화와 테스트 가능성을 제공하므로 일반적으로 선호됩니다.
위 내용은 PHP 클래스의 데이터베이스에 액세스할 때 전역 변수를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!