何でもそうですが、独自の長所と短所を持つ多くのアプローチがあります。
私の(現在の)好みは、オブジェクトのグループと個々のオブジェクトをそれぞれ処理するために、クラスメソッド(静的)とオブジェクトメソッドを組み合わせることです。
次のコードを検討してください。
class Survey {
public $id;
public $uid;
public $rate;
public $reason;
public $complete;
public $opinion;
public function save()
{
drupal_write_record('survey', $this);
}
/**
* Loads survey from secondary storage
*
* @param string $id Unique surevy ID
*/
public function load( $id ) {
// loads a survey from secondary storage
}
/**
* Returns report of survey results.
*
* @param array $surveys array of surveys to process. If not passed or NULL,
* The whole set of completed surveys will be processed.
* @return string HTML Formatted report
*/
public static function compile_results( $surveys = NULL )
{
if( empty( $surveys ) )
{
$surveys = self::get_completed_results();
}
foreach( $surveys as &$survey )
{
// process an individual survey, possibly aggregating it
}
}
/**
* Retreives completed surveys from secondary storage.
*
* @return array Array of completed Survey objects
*/
public static function get_completed_surveys()
{
$surveys = array();
// Select all surveys from secondary storage
$survey_rows = array(); //replace with code to get surveys
foreach( $survey_rows as $survey_row )
{
$survey = new Survey();
$survey['id'] = $survey_row['id'];
$survey['uid'] = $survey_row['uid'];
$survey['rate'] = $survey_row['rate'];
$survey['reason'] = $survey_row['reason'];
$survey['complete'] = $survey_row['complete'];
$survey['opinion'] = $survey_row['opinion'];
$surveys[] = $survey;
}
return $surveys;
}
}
静的メソッドを使用して、オブジェクトのグループを操作できます。ロードされた各調査への参照を保持する静的配列を持つこともできます。
もう1つのオプションは、調査のグループを操作することを目的とした「調査」クラスを用意することです。以前のアプローチは私にとってよりクリーンに感じます。