没有赋值给变量的PHP类的实例化

时间:2012-12-14 13:10:28

标签: php codeigniter

我在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;

这项技术的名称是什么? 这意味着什么?

2 个答案:

答案 0 :(得分:5)

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

简而言之:不要认为这是一个好习惯。 globalself::$APP = $this证实了我认为这是一段糟糕的代码。

答案 1 :(得分:0)

我想这可以被视为某种facade design。 - 调用类(构造函数)并完成赋值,尽管在构造函数本身中。

所以new CI只是扩展Super对象并初始化自己的构造函数。 与函数类似,function somefun(){ return }; somefunc();//call somefunc

CI_Controller 加载运行Codeigniter所需的所有类,它是 SUPER对象

$ci = &get_instance() // CI_Controller