4

独自の MY_Model 基本クラスを作成しようとしていますが、奇妙な問題に直面しています:

/core/MY_Model.php

    function __construct() {
        if ( !empty($this->table)) {
            // query db, etc.
        }
        else {
            // even though that I set $this->table value 
            // in the child class, I always ended up here
            // it's always empty!!!!
            log_message('error', 'some error message');
        }
        // ...
    }
}

/models/test_model.php

    function __construct() {
        parent::__construct();
    }

    // ...

}

子クラスで $this->table の値を設定したにもかかわらず、常に MY_Model クラスで $table の値が空であることがわかりました。常に空です!!!! 何かヒントをください?!

4

3 に答える 3

11

特定の/特別なものが必要でない限り、Jamie Rumbelows の "MY_Model" を使用する必要があります。これは、おそらくあなた (または私) が作成できるものよりも優れているため、他のコードの作成に集中できます。車輪を再発明する必要はありません。

こちらの GitHubからコードを取得できます

そして、アプリケーションで MY_Model を使用する方法を示すすばらしいチュートリアルがあります。

正直なところ、試してみてください。後悔することはありません。

于 2012-06-04T16:18:41.800 に答える
2

モデル コンストラクターで、次のようにします。

class Test_model extends MY_Model{
   public function __construct()
   {
       parent::__construct();
       $this->table = 'test_model';
    }
    //...
}
于 2012-07-09T16:28:23.583 に答える
1

子クラスで $table 変数をオーバーライドしようとしないでください。あなたがしていることは次のとおりです。

  • CI_MODEL には以下が含まれます。
    • 独自のスコープの保護された $table。
  • MY_Model には以下が含まれます。
    • 独自のスコープの保護された $table。これは、継承された変数 $table をオーバーライドします。

子クラスでオーバーライドすると、親クラスにバブルアップしません。これは、$table が子クラスのみの一部になるためです。

あなたがする必要があるのは、子の $table 変数の宣言を削除することです:

/models/test_model.php
<?php
class Test_model extends MY_Model {
    function __construct() {
        parent::__construct();
        $this->table = 'test_models';
    }

    // ...

}
于 2012-09-26T07:33:35.027 に答える