1

すべてのコントローラーで同じコードを何度も繰り返さないようにしています。そのため、データをフェッチする関数を親コントローラーに配置し、そのデータを子コントローラーに渡そうとしています。

class Frontend_Controller extends MY_Controller
{
    public function __construct() 
    {
        parent::__construct();  
        $this->load->model('configOptionsModel');
    $this->db->where('configid = "2"');
        $specialdata['bgimage'] = $this->configOptionsModel->get();       
    }    
}

子コントローラーのコードは次のとおりです

 class Home extends Frontend_Controller {

public function __construct() {
        parent::__construct(); 
        print_r($this->specialdta); // line where error occurs
        die();
    }

    public function index()
{   
    $data['main_content'] = 'home';
    $this->load->view('frontEnd/template',$data);   
}   
 }

次のエラーが表示されます。

A PHP Error was encountered
Severity: Notice
Message: Undefined property: Home::$specialdta
Filename: controllers/home.php
Line Number: 9

案の定、9 行目は print_r($this->specialdta); です。

コントローラー (クラス) を拡張すると、親コントローラー (クラス) のメソッドとプロパティにアクセスできることはわかっています。これらは public と宣言されているからです。

誰かが私が間違っていることを説明できますか?

よろしく、ゾラン

4

1 に答える 1

1

CodeIgniter は魔法ではなく、PHP クラスの仕様と規則に従います。継承モデルと同様に、親クラスから変数にアクセスするには、それらを親に割り当てる必要があります$this

$this->specialdata = $this->configOptionsModel->get();親コンストラクターで動作しますが、このように乱暴にデータ属性を割り当てることに注意してください。ボンネットの下、および継承チェーンの多くのクラスでは、CodeIgniter のコアにはいくつかの共通プロパティが予約されている場合があり、それらを上書きしたくない場合があります。

于 2013-02-10T10:00:29.423 に答える