집 >데이터 베이스 >MySQL 튜토리얼 >PHP 클래스 내에서 외부 개체에 올바르게 액세스하려면 어떻게 해야 합니까?
클래스에서 전역 변수 사용
PHP에서는 global
키워드를 사용하여 클래스 내부에서 전역 변수에 액세스할 수 있습니다. 그러나 이로 인해 코드 가독성 및 유지 관리 문제가 발생할 수 있습니다. 다음 코드 예제를 고려해보세요.
<code class="language-php">$db = new DB_MySQL("localhost", "root", "", "test"); // 连接数据库 include_once("pagi.php"); $pagination = new pagi(); $records = $pagination->get_records("SELECT * FROM `table`");</code>
pagi.php
파일:
<code class="language-php">class pagi { public function get_records($q) { global $db; $x = $db->query($q); return $db->fetch($x); } }</code>
이 코드는 get_records
메서드에서 pagi
클래스 외부의 $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 the, fields, you, want, to retrieve FROM `table`");</code>
<code class="language-php">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); } }</code>
이 경우 $db
객체는 생성자를 통해 Paginator
클래스에 전달됩니다. 이를 통해 클래스는 전역 변수로 설정하거나 클래스 내에 새 인스턴스를 생성하지 않고도 $db
개체를 사용하여 쿼리를 수행할 수 있습니다.
결론
전역 변수를 사용하는 것이 편리할 수 있지만, 종속성 주입은 클래스에 외부 기능을 추가하는 방법보다 더 유연하고 유지하기 쉽습니다. 종속성을 명시적으로 전달하면 클래스를 특정 구현에서 분리하고 테스트 및 유지 관리가 더 쉬워집니다.
위 내용은 PHP 클래스 내에서 외부 개체에 올바르게 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!