0

私の CakePHP 2 アプリケーションには、そのようなベンダーがいます。コントローラー クラス内にこのベンダー クラスのインスタンスを作成する必要があります。そのため、コントローラーのさまざまな関数内でそのインスタンスを使用します。

App::import('Vendor', 'fancyVendor', array('file' => 'fancyVendor.php'));

class MyController extends AppController {

    public $fancyVendor;

    function beforeFilter() {
       $fancyVendor = new fancyVendor();
       $fancyVendor->setValue("12");
    }

    function showMe() {
       echo $fancyVendor->getValue();
    }
}

showMe関数内で、 beforeFilter関数内で設定した値を取得できませ。インスタンス化する適切な方法はありますか?

4

1 に答える 1

2

スコープについて学ぶ必要があります。スコープ内で変数を初期化し、beforeFilter()それをスコープ内で使用しようとしていshowMeます。2つは完全に異なります。

通常はプロパティと呼ばれる、クラス全体にスコープが設定された変数を作成できます...

function beforeFilter() {
   $this->fancyVendor = new fancyVendor();
   $this->fancyVendor->setValue("12");
}

function showMe() {
   echo $this->fancyVendor->getValue();
}

もう 1 つの注意点は、App::uses()メソッドを使用してクラスをロードできることです。あなたの命名によると、それはうまくいくでしょう。(クラスはこの方法で遅延ロードされます)

App::uses('fancyVendor', 'Vendor');
于 2012-12-19T21:51:19.647 に答える