モデル/マッパーを使用することから始めます。これは、プレーンオブジェクトを取得し、それらをデータベースに永続化できるようにするための非常に簡単な方法です。また、データベース呼び出しとコード(永続ロジック)を機能(アプリケーションまたはビジネスロジック)と混在させることも回避します。簡単な例:
class User {
public $id;
public $username;
}
class UserMapper {
/**
* @param User $user
*/
public function save(User $user) {
if(isset($user->id)) {
$statement = "Update users set username = ? where id = ?"
} else {
$statement = "insert into users set username = ?, id = ?"
}
$instance = db::getInstance();
$sth = $instance->prepare($statement );
$values_a = array($user->username, $user->id);
$db_result = $sth->execute($values_a);
}
/**
* @param int $userId
* @return User
*/
public function load($userId) {
$statement = "select * from users where id = ?";
$instance = db::getInstance();
$sth = $instance->prepare($statement );
$values_a = array($user->id);
$db_result = $sth->execute($values_a);
$returnUser = new User();
$returnUser ->id = $db_result[0]['id'];
$returnUser ->username = $db_result[0]['username'];
return $returnUser;
}
}
メンバーに直接アクセスする代わりに、ゲッター/セッターを使用することもお勧めしますが、これはコードを単純化するためです...より多くのモデル/マッパーを開発すると、一般的なマッパー機能(保存、読み込み、削除、検索)が見つかります。共通のロジックを含むようにコードをリファクタリングできるため、コピーパスタが大量に発生することはありません。