1

私はCodeigniterHMVC拡張機能(Wiredesignzによる)でこのコード行を超えました。ここでは、変数に割り当てられることなくクラスがインスタンス化されました(Base.phpのクラスCI)

コード :

class CI extends CI_Controller
{
  public static $APP;

  public function __construct() {

    /* assign the application instance */
    self::$APP = $this;

    global $LANG, $CFG;

    /* re-assign language and config for modules */
    if ( ! is_a($LANG, 'MX_Lang')) $LANG = new MX_Lang;
    if ( ! is_a($CFG, 'MX_Config')) $CFG = new MX_Config;

    parent::__construct();
  }
}

/* create the application object */
new CI;

このテクニックの名前は何ですか?意味は何ですか?

4

2 に答える 2

5

これには名前がなく、コンストラクターが間違いなくやりすぎていることを意味します。クラスのインスタンスを参照せずに作成したい理由は、コンストラクターだけを実行したいだけで、それ以上は必要ないからです。これは、コンストラクターが何かを「実行」することを意味しますが、コンストラクターは、オブジェクトが安定した/有効な状態にあり、それ以上のものではないことを確認するだけで済みます。

つまり、これが良い習慣だと思い込まないでください。そして、これは悪いコードであるという私の意見を確認しますglobalself::$APP = $this

于 2012-12-14T13:13:55.150 に答える
0

これはある種のと見なすことができると思いますfacade design。-コンストラクター自体ではありますが、クラス(コンストラクターが呼び出されます)と割り当てが行われます。

new CIつまり、Superオブジェクトを拡張し、独自のコンストラクターを初期化するだけです。関数と同様に、 function somefun(){ return }; somefunc();//call somefunc

CI_Controllerは、Codeigniterの実行に必要なすべてのクラスをロードします。これはSUPERオブジェクトです。

$ci = &get_instance() // CI_Controller
于 2012-12-14T13:42:40.190 に答える