> 백엔드 개발 > PHP 튜토리얼 > 클래스 내에서 데이터베이스 개체에 액세스할 때 전역 변수를 방지하는 방법은 무엇입니까?

클래스 내에서 데이터베이스 개체에 액세스할 때 전역 변수를 방지하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-22 15:00:20
원래의
167명이 탐색했습니다.

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

클래스 내에서 전역 변수 사용

페이지 매김 기능을 생성하려면 클래스 내에서 데이터베이스 개체에 액세스해야 합니다. 그러나 클래스 내부의 외부 변수에 액세스하려고 하면 오류가 발생할 수 있습니다. 이 문제를 처리할 수 있는 가능한 솔루션을 살펴보겠습니다.

"객체가 아닌 멤버 함수 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);
    }
}
로그인 후 복사

이는 더 많은 것을 제공합니다. 여러 방법에 다양한 데이터베이스 요구 사항이 있을 때 유연성을 발휘합니다.

종속성의 이점 주입

전역 변수를 사용하는 것과 비교하여 종속성 주입은 다음과 같은 몇 가지 장점을 제공합니다.

  • 명시적으로 정의된 종속성: 어떤 개체가 다른 개체에 종속되는지 명확하게 해줍니다. , 숨겨진 종속성을 제거합니다.
  • 느슨한 결합: 클래스 테스트 목적으로 다른 데이터베이스 개체 또는 모의 데이터베이스 개체로 쉽게 전환할 수 있습니다.
  • 테스트 가능성: 단위 테스트는 데이터베이스 기능을 방해하지 않고 클래스에만 집중할 수 있습니다.
  • 확장성: 주요 코드 변경 없이 여러 데이터베이스 또는 기타 프레임워크를 사용할 수 있습니다.

위 내용은 클래스 내에서 데이터베이스 개체에 액세스할 때 전역 변수를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿