0

クラスを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
}
4

3 に答える 3

0

リクエスト クラスと結果クラスを別々に定義し、メイン クラスの変数をそれらのインスタンスに割り当てることができます。

何かのようなもの:

class result{
...
}

class request{
...
}

class search{
    var results;
    var request;

    function __construct(){
        $results = new ArrayObject();
        $request = new stdClass();
    }
...
}

次に、検索機能の結果のリストに割り当てる/追加することができ、リクエストオブジェクトを「リクエスト」変数に割り当てることができます

$this->results[] = $newresult;

表示するときにそれらをループします

于 2013-10-17T21:46:54.407 に答える