이것은 정기적으로 접하는 디자인 문제이며 주제에 대한 일반적인 통찰력을 찾고 싶습니다. 여기에 제공된 코드는 예제 일뿐입니다. 설계 단계에서OOP 디자인 : 응용 프로그램 개체에 DB 처리를 통합하는 방법
당신이 객체가 필요 결정하기 쉽습니다 :
User
==========
Unique ID
Login name
Password
Full name
을 그리고 데이터베이스 오브젝트로 변환하는 것은 쉽다 :
CREATE TABLE user (
user_id INT NOT NULL PRIMARY KEY,
username VARCHAR(15) NOT NULL UNIQUE,
password_hash CHAR(32) NOT NULL,
full_name VARCHAR(50)
);
내 의심은 PHP 수준에서 시작합니다. 분명한 변환은 다음과 같습니다.
<?php
class User{
public $user_id, $username, $full_name;
}
?>
그러나 실제 값을 어떻게 채워야합니까?
<?php
class User{
public $user_id, $username, $full_name;
public function __construct($user_id){
$sql = 'SELECT username, full_name FROM user WHERE user_id=?';
$parameters = array($user_id);
$res = get_row_from_db($sql, $parameters);
$this->user_id = $user_id;
$this->username = $res['username'];
$this->full_name = $res['username'];
}
}
?>
:
내가 클래스 생성자 내부를 캡슐화 할 수 있습니다 ...
<?php
class User{
public $user_id, $username, $full_name;
public function __construct($user_id, $username, $full_name){
$this->user_id = $user_id;
$this->username = $username;
$this->full_name = $full_name;
}
}
?>
을하지만 그때 나는 다른 곳에서 쿼리를 실행해야합니다
나는 불가지론 DB 클래스 유지할 수 있습니다
이것은보기에는 좋지만 클래스와 함께 많은 것을하지 못하게합니다.
- 검증
대부분의 경우 (내가 100 명의 사용자를 보여 100 개 쿼리를 감당할 수) 포럼 게시물에서 사용자 이름과 암호 ($의 USER_ID는 아직 알려져 있지 않다)
은 또한에 대해 몇 가지 아이디어를 감사하겠습니다 :
- 세션에서 정보를 저장하는 사용자
- 의 컬렉션을 처리 DB는 모든 페이지 요청에 조회 할 필요가 없습니다 있도록
==== 기록을 위해 ====
나는 재미있는 독서를 제공하므로 대답으로 고든의 대답을 태그로 붙였습니다. 무엇이든간에, 내가 다음과 같이 요약 할 수있는 PHP 매뉴얼의 객체 직렬화 페이지에서 사용자의 의견 중 하나에 very illustrative code snippet을 발견 한 것을 주목할 필요가 :
- 그것은 하나 개의 클래스를 사용합니다.
- 인스턴스는 특정 사용자를 나타냅니다.
- 생성자에 사용자 세부 정보가 제공됩니다.
- 클래스는 인스턴스를 가질 수 있기 전에 필요한 기능을위한 정적 메소드를 제공합니다. ID 또는 이름으로 DB에서 사용자를 가져옵니다.
- 사용자 인스턴스를 세션 데이터로 직렬화 할 수 있습니다.
OOP 전문가가 아니기 때문에 나는 매우 간단하면서도 깨끗하고 유용하다는 것을 알았습니다. OOP 텍스트는 간단한 작업을 지나치게 복잡하게 만드는 경향이 있으며 일상 업무는 주로 소규모 프로젝트로 구성됩니다.
두 번째 방법으로 새로운 사용자를 만드는 방법에 대해 알려주십시오. 새 사용자는 데이터베이스에 존재하지 않습니다. – Rune
언급 한 코드 스 니펫은 ActiveRecord 패턴 구현과 같습니다. – Gordon