我在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;
这项技术的名称是什么? 这意味着什么?
答案 0 :(得分:5)
这没有名称,暗示是,构造函数肯定做得太多了。一个人想要创建一个类的实例而不引用它的原因是,他只希望构造函数想要执行,但仅此而已。这意味着,构造函数“做”某事,但构造函数应该只确保一个对象处于稳定/有效状态而不再存在。
简而言之:不要认为这是一个好习惯。 global
和self::$APP = $this
证实了我认为这是一段糟糕的代码。
答案 1 :(得分:0)
我想这可以被视为某种facade design
。
- 调用类(构造函数)并完成赋值,尽管在构造函数本身中。
所以new CI
只是扩展Super对象并初始化自己的构造函数。
与函数类似,function somefun(){ return }; somefunc();//call somefunc
CI_Controller 加载运行Codeigniter所需的所有类,它是 SUPER对象
$ci = &get_instance() // CI_Controller