1

我在 Codeigniter HMVC 扩展(通过 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

这没有名字,暗示构造函数肯定做的太多了。一个人想要创建一个类的实例而不引用它的原因是,他只希望构造函数想要被执行,仅此而已。这意味着,构造函数“做”某事,但构造函数只应确保对象处于稳定/有效状态,仅此而已。

简而言之:不要认为这是一个好习惯。global并证实了我的self::$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 回答