현재 위치: > 최신 기사 목록> pdostatement에서 기본 클래스 사용과 사용자 정의 클래스의 차이점 :: FetchObject

pdostatement에서 기본 클래스 사용과 사용자 정의 클래스의 차이점 :: FetchObject

gitbox 2025-05-11

데이터베이스 작업에 PHP를 사용할 때 PDOSTATEMENT 클래스는 쿼리 결과를 추출하는 다양한 방법을 제공합니다. 그중에서도 FetchObject ()는 쿼리 결과를 객체에 직접 매핑하는 매우 편리한 방법입니다. 이 기사는 FetchObject () 의 사용과 사용의 차이점, 특정 사용 시나리오 및 성능 차이에 대해 자세히 설명합니다.

fetchObject () 란 무엇입니까?

fetchObject () 메소드는 결과 세트에서 행을 가져 와서 객체로 반환합니다. 기본적으로 STDCLASS 인스턴스를 반환하지만 쿼리 결과가 특정 유형의 객체가되도록 사용자 정의 클래스 이름으로 전달 될 수도 있습니다.

기본 사용량은 다음과 같습니다.

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->query('SELECT id, name FROM users');

// 기본적으로 사용됩니다 stdClass
$user = $stmt->fetchObject();
echo $user->name;

// 사용자 정의 클래스 사용
class User {
    public $id;
    public $name;

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$stmt->execute(); // 쿼리를 다시 실행하십시오
$user = $stmt->fetchObject('User');
echo $user->greet();
?>

기본 클래스 (STDCLASS) 대 커스텀 클래스

1. 기본 클래스 (stdClass)

  • 특징 : PHP 내장 빈 개체. 속성은 방법없이 동적으로 추가됩니다.

  • 장점 : 가볍고 최소한의 생성 오버 헤드, 사전 정의가 필요하지 않습니다.

  • 단점 : 데이터 만 저장할 수 있지만 행동 논리를 첨부 할 수는 없습니다.

시나리오에 적합 :

  • 임시 데이터 만 필요합니다.

  • 데이터 개체에는 추가 비즈니스 운영이 필요하지 않습니다.

  • 프레젠테이션 목록 또는 간단한 API 반환과 같은 간단한 쿼리 결과의 빠른 처리.

예:

 $user = $stmt->fetchObject();
echo $user->name; // 속성을 직접 읽으십시오

이 데이터를 JSON에 빠르게 패키지하려면 :

 echo json_encode($user);

최고의 성능으로 매우 간단하고 직접적입니다.

2. 커스텀 클래스

  • 특징 : 자신의 방법, 마법 방법 (예 : __construct , __get ) 및 속성 유형 제약 조건을 정의 할 수 있습니다.

  • 장점 : 객체는 데이터를 저장 할뿐만 아니라 논리를 캡슐화하며 OOP의 원리 (객체 지향 프로그래밍)와 더 일치합니다.

  • 단점 : 특히 복잡한 생성자 일 때 인스턴스화 할 때 특정 오버 헤드가 있습니다.

시나리오에 적합 :

  • 데이터 객체는 비즈니스 로직에 바인딩되어야합니다.

  • 속성은 균일하게 처리되어야합니다 (예 : 자동 날짜 서식, 암호화 및 암호 해독 필드 등).

  • 코드가 더 관리 가능하고 테스트 가능하기를 바랍니다.

  • 대규모 프로젝트에서 MVC 및 DDD (도메인 구동 설계) 모델을 따르십시오.

예:

 class Product {
    public $id;
    public $name;

    public function getDisplayName() {
        return strtoupper($this->name);
    }
}

$stmt = $pdo->query('SELECT id, name FROM products');
$product = $stmt->fetchObject('Product');
echo $product->getDisplayName();

이것은 데이터를 한눈에 분명하게 만들뿐만 아니라 후속 확장 성을 증가시킵니다.

성능 차이 분석

프로젝트 기본 stdClass 커스텀 클래스
인스턴스화 속도 매우 빠른 (내장) 약간 느리게 (사용자 클래스의 인스턴스화가 필요합니다)
메모리 사용 매우 낮습니다 약간 높음 (메소드 정의 포함)
유연성 낮추다 높은
적절한 데이터 볼륨 많은 양의 데이터 중소형 배치 데이터

일반적으로 말하면, 수천 줄 이상의 대형 데이터 세트를 처리해야하고 객체 동작에 대한 특별한 요구 사항이 없으면 STDClass 사용은 최상의 성능을 갖습니다 .

양식 처리, 도메인 객체 모델링 및 REST API 응답과 같은 비즈니스 로직을 하나씩 처리 하면 사용자 정의 클래스가 더 적합합니다 .

팁 : 맞춤형 클래스 생성자에 대해

사용자 정의 클래스에 생성자가 있고 생성자에 매개 변수가있는 경우 FetchObject는 문제가 발생합니다. FetchObject는 기본적으로 매개 변수가없는 생성자를 호출하기 때문입니다. 매개 변수를 전달 해야하는 경우 두 번째 매개 변수를 사용할 수 있습니다.

 $user = $stmt->fetchObject('User', ['param1', 'param2']);

그러나 매개 변수를 전달할 때 PDO는 속성 할당 전에 생성자를 호출합니다.

요약

  • 기본 클래스 STDCLASS : 빠르고 단순하며 간단한 데이터 읽기 및 성능 우선 시나리오에 적합합니다.

  • 맞춤형 클래스 : 강력하게 확장 가능하며 체계적이고 풍부한 행동 시나리오에 적합하며 중간 및 대규모 프로젝트에 적합합니다.

  • 성능 차이 : STDClass는 더 빠르고 메모리 절약이지만 소규모 응용 프로그램에서는 사용자 정의 클래스의 성능 차이는 일반적으로 무시할 수 있습니다.

선택한 방법은 프로젝트 규모, 비즈니스 복잡성 및 향후 유지 보수 비용 에 따라 다릅니다.
https://api.gitbox.net/user/list 와 같은 가벼운 API 인 경우 stdclass가 충분할 수 있습니다.
전자 상거래 플랫폼의 주문 처리 로직과 같은 대규모 비즈니스 시스템 인 경우 사용자 정의 클래스를 사용하는 것이 더 합리적입니다!