0

CodeIgniterについて哲学的な質問があり、何かをインスタンス化するための「新しい」の利用におけるそのモデルの役割があります。

私には、たとえば本のモデルを使用するために使用するという考えがあります。

$this->load->model("book_model")

それ以外の

new book_model

つまり、book_modelを1回だけロードするため、book_modelのインスタンスは1つだけになります。複数の本をモデル化する場合は、_construct関数を使用する代わりに、book_modelでcreateNewBook関数を使用します。 「新品」を使用した後。

このように見るのは正しいですか?book_modelの同じインスタンスとその中の関数「initiateBook」を使用していると考えるつもりですか?CodeIgniterで「new」を使用しないことを検討する必要がありますか?

4

1 に答える 1

3

実際$this->load->model("book_model")CodeIgniterdoesを呼び出すと、ジョブが実行されます。つまり、CodeIgniter'sLoader classには、引数として渡したモデルをインスタンス化するメソッドがあります。public function model(...)たとえば、book_modelここにあります。

から取得(にありmodel functionます)Loader classsystem/core

if (in_array($name, $this->_ci_models, TRUE))
{
    return;
}

保護された配列をチェックして_ci_models、要求されたモデルがすでにロードされているかどうかを確認し、ロードreturnsされていない場合はロードします。つまり、(モデルメソッドの最後のセグメント)

$CI->$name = new $model(); // here $model is a variable which has the name of the requsted model
$this->_ci_models[] = $name; // stores the instantiated model name in the _ci_models[] array
return; // then returns

したがって、手動でインスタンス化するためにを使用する必要はなくnew、モデル(他のライブラリまたはクラスにも同じことが適用されます)がロードされると、スクリプト内のどこからでもアクセス/使用できます。

シングルトンシングルトンパターンに関するSOの回答)デザインパターンを使用しているため、使用可能なスーパーグローバルオブジェクト(CodeIgniterの1つのインスタンス)は1つだけCodeIgniterであり、ロードしたものまたはロードするものすべてを伝送します。$CI

モデルをロードしてから、そのモデルのメソッドをbook_model呼び出すにはinitiateBook()

$this->load->model("book_model"); // book_model loaded/instantiated
$this->book_model->initiateBook(); // initiateBook() function has been called
于 2012-07-21T21:39:53.130 に答える