私は、CodeIgniterでさまざまな基準(たとえば、著者、タイトル、出版者など)に基づいて検索できるライブラリ検索エンジンを作成しています。だから、私は、私は彼クラスAuthorSearch
CodeIgniterモデルを使用したOOP抽象化
class AuthorSearch implements BookSearch extends CI_Model{
function __construct(){
parent::__construct();
}
public function search($authorname){
//Implement search function here...
//Return query result which we can display via foreach
}
}
として今書くことができます著者に基づいて検索を実装する場合は、データベースを検索するための責任のすべてのクラスが
interface BookSearch{
/**
Returns all the books based on a given criteria as a query result.
*/
public function search($search_query);
}
を実装しますBookSearch
たインターフェースを定義し私はコントローラを定義してこれらのクラスを使用し、結果を表示します。
class Search extends CI_Controller{
/**
These constants will contain the class names of the models
which will carry out the search. Pass as $search_method.
*/
const AUTHOR = "AuthorSearch";
const TITLE = "TitleSearch";
const PUBLISHER = "PublisherSearch";
public function display($search_method, $search_query){
$this->load->model($search_method);
}
}
これは私が問題に当たった場所です。 CodeIgniterのマニュアルには、モデル内のメソッド(つまりsearch
)を呼び出すために、私は$this->AuthorSearch->search($search_query)
と書いています。しかし、私は文字列として検索クラスのクラス名を持っているので、私は実際に$this->$search_method->search($search_query)
を行うことはできません?
これがJavaの場合は、オブジェクトを定数にロードします。 PHP5にはヒントがありますが、このプロジェクトのターゲットプラットフォームにはPHP4が含まれています。また、私はこの抽象化を行うための「CodeIgniter」の方法を探しています。何かヒント?