クラスをphpのクラス内で定義できないことは承知していますが、目的の効果を達成する別の方法があるかどうか知りたいです。
現在、検索を行うために使用する 3 つのオブジェクトのセットがあります。最初のものは $search_request と呼ばれます。$keywords (文字列)、$search_results_per_page (int)、$page_requested (int)、$owner_id (int) などのプロパティが含まれています。
$search_result というオブジェクトもあり、$total_matches (int)、$result_set (オブジェクトの配列) などのプロパティが含まれています。
最後に、$search_request と $search_result を含む $search_handler オブジェクトと、$search_request に基づいて $search_result を構築する関数があります。使い方は次のようになります。
$search_handler = new search_handler();
$search_handler->search_request->keywords = "cats, dogs";
$search_handler->search_request->search_results_per_page = 10;
$search_handler->search_request->page_search_requested = 1;
$search_handler->get_search_result();
echo $search_handler->search_result->total_matches;
foreach($search_handler->search_result->result_set)
{
//do something
}
これはすべて正常に機能します。問題は、このモデルをさまざまなオブジェクトに対して繰り返したいことです。そのため、現在、各クラスで「search_」プレフィックスのハッキー ソリューションを使用することを余儀なくされています。
次のようなものが欲しいです:
class search
{
public class request
{
$keywords = "";
$search_results_per_page = 5;
$page_requested = 1;
}
public class result
{
$total_matches = null;
$result_set = array();
}
public get_results()
{
//check cache first
$cached = look_in_cache(md5(serialize($this->request)));
if($cached)
{
$this->result->result_set = $cached;
$count = count($cached);
$this->result->total_matches = $count;
}
else
{
//look in db
$results = get_results_from_database($this->request->keywords); //db call goes here
$this->result->result_set = $results;
$count = count($results);
$this->result->total_matches = $count;
}
}
}
//usage
$search = new search();
$search->request->keywords = "cats, dogs";
$search->request->search_results_per_page = 10;
$search->request->page_search_requested = 1;
$search->get_results();
echo $search->results->total_matches;
foreach($search->results->result_set as $result)
{
//do something
}