個別の(保護された)関数を作成します。これらは、実行する必要があるだけのプリペアドステートメントを返します。
/**
* @returns PDOStatement
*/
protected function prepareStatementForCase1(PDO $dbObject,Object $dataToBind){...}
/**
* @returns PDOStatement
*/
protected function prepareStatementForCase2(PDO $dbObject,Object $dataToBind){...}
それから、私は外でどちらを呼ばなければならないかを決めるでしょう。コードをより簡単に再構築、保守、および読み取ることができます。
例:
class Document{
protected $dbObject;
public function __construct(PDO $dbObject){
$this->dbObject=$dbObject;
}
public function doQuery($paramOne,$paramTwo,...){
$logicalFormulaOne=...; // logical expression here with parameters
$logicalFormulaTwo=...; // logical expression here with parameters
if($logicalForumlaOne){
$dbStatement=$this->prepareStatementForCase1($dataToBind);
}else if($logicalFormuleTwo){
$dbStatement=$this->prepareStatementForCase2($dataToBind);
}
$dbResult=$dbStatement->execute();
}
protected function prepareStatementForCase1(Object $dataToBind){
$dbStatement=$this->dbObject->prepare("query string");
$dbStatement->bindParam(...);
return $dbStatement;
}
}
ただし、PDOResultオブジェクトが異なるタイプのデータベースタプルを表す場合、またはいずれかのケースでより多くの行を返す場合は、これをお勧めしません。
私が通常行うことは、(あなたの例では)ドキュメントを表すクラスを作成することです。唯一。挿入、削除、選択、フィールドによる変更、および1つのアイテムの処理を行うことができます。(たとえば)それらをさらにフェッチする必要がある場合は、ドキュメントのコレクションを処理するDocumentListなどの新しいクラスを作成します。このクラスは、より多くのドキュメントオブジェクトをフェッチするときに、ドキュメントオブジェクトの配列を提供します。