PHP 개발에서 PDO는 데이터베이스 작업을 처리하는 풍부하고 안전한 방법을 제공합니다. 그 중에서 Pdostatement :: FetchObject는 쿼리 결과를 클래스의 인스턴스에 직접 매핑 할 수있는 매우 실용적인 기능입니다. 또한, 우리는 클래스 방법을 결합하여 객체 생성 직후에 동적으로 채우거나 프로세스를 결합하여 코드 유연성과 유지 보수 가능성을 향상시킬 수 있습니다.
이 기사는 특정 예제를 사용하여 FetchObject 및 사용자 정의 클래스 방법을 사용하여이를 달성하는 방법을 자세히 설명합니다.
먼저 FetchObject를 사용하는 기본 예를 살펴 보겠습니다.
<?php
// 데이터베이스 연결
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
// 간단한 쿼리
$stmt = $pdo->query('SELECT id, name, email FROM users');
// 사용 fetchObject 결과를 얻으십시오
$user = $stmt->fetchObject();
echo $user->name;
?>
여기서 FetchObject는 기본적으로 stdClass 객체를 반환합니다. 편리하지만 데이터를 얻은 직후 처리와 같이 충분히 유연하지 않습니다.
클래스 이름을 전달하고 FetchObject가 특정 객체 인스턴스를 반환하도록 할 수 있습니다.
<?php
class User
{
public $id;
public $name;
public $email;
}
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject('User');
echo $user->email;
?>
현재 $ User는 사용자 클래스의 인스턴스가되며 자동으로 공개 속성으로 채워집니다.
데이터를 작성하거나 더 많은 정보를로드하는 등 데이터가 채워진 직후 클래스 메소드를 호출하려면 생성자 또는 사용자 정의 메소드를 사용할 수 있습니다.
<?php
class User
{
public $id;
public $name;
public $email;
public function __construct()
{
// 여기에서 전처리 할 수 있습니다,예를 들어 서식 email
if (!empty($this->email)) {
$this->email = strtolower($this->email);
}
}
}
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject('User');
echo $user->email;
?>
그러나 참고 : FetchObject를 사용할 때 기본 매개 변수는 생성자로 전달되지 않습니다. 따라서 매개 변수를 전달하거나 초기화 프로세스를보다 세분화하려면 다른 방법이 필요합니다.
보다 유연한 접근 방식은 클래스에서 사용자 정의 초기화 방법을 정의하는 것입니다.
<?php
class User
{
public $id;
public $name;
public $email;
public function initialize()
{
if (!empty($this->name)) {
$this->name = ucfirst($this->name);
}
}
}
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject('User');
// 초기화 방법을 수동으로 호출하십시오
if ($user) {
$user->initialize();
}
echo $user->name;
?>
이를 통해 객체가 생성자로 제한되지 않고 생성 된 후 임의의 논리를 실행할 수 있습니다.
더 자동화하려면 작은 공장 방법을 캡슐화하여 균일하게 가져 와서 초기화 할 수 있습니다.
<?php
class User
{
public $id;
public $name;
public $email;
public function initialize()
{
$this->name = ucfirst($this->name);
}
public static function fetchAndInitialize(PDOStatement $stmt)
{
$user = $stmt->fetchObject(self::class);
if ($user instanceof self) {
$user->initialize();
}
return $user;
}
}
// 쿼리 준비
$stmt = $pdo->query('SELECT id, name, email FROM users');
// 사용静态方法统一处理
$user = User::fetchAndInitialize($stmt);
echo $user->name;
?>
이 패턴을 사용하면 데이터 매핑 및 초기화 처리가 완전히 분리되어 코드를보다 쉽게 유지 관리하고 확장 할 수 있습니다.
FetchObject는 객체에 속성 만 채우며 Setter 메소드를 호출하지 않습니다. 세터 방법을 통해 속성을 처리 해야하는 경우 수동으로 호출해야합니다.
초기화 메소드에서 호환 처리를 수행하지 않는 한 데이터베이스 테이블 필드가 클래스 속성 이름과 엄격하게 일치하는지 확인하십시오.
데이터 소스가 https://api.gitbox.net/data/users 와 같은 외부 인터페이스 인 경우 외부 데이터를 직접 신뢰하지 않도록주의하지 않으면 기본 체크섬 필터링을 수행해야합니다.
pdostatement :: FetchObject는 데이터베이스 행을 객체 인스턴스로 빠르게 변환하는 방법을 제공합니다. 클래스 방법의 합리적인 설계를 통해 데이터를 채우는 동안 다양한 동적 처리 로직을 구현하여 시스템의 확장 성과 유지 관리를 크게 향상시킬 수 있습니다.
위의 예를 통해 FetchObject를 사용자 정의 클래스와 우아하게 결합하여 데이터를 처리하는 방법을 마스터했다고 생각합니다. 앞으로이 기술은 대규모 프로젝트에서 매우 유용 할 것입니다!