DI.php中的91行,PhalApi_Request和PhalApi_Response_Json在什么时候实例化的呢

public function onConstruct() {
$this->request = 'PhalApi_Request';
$this->response = 'PhalApi_Response_Json';
}
是否在loader.php中就已经实例化了呢?
已邀请:

dogstar - PhalApi创始人

赞同来自:

这里应分为两个阶段,第一个阶段是注册request与response,可从以下调用链看出注册的时机:
#1 ./Public/init.php 文件
//自动加载
DI()->loader = $loader;

#2 ./PhalApi/PhalApi/functions.php 文件
function DI() {
return PhalApi_DI::one();
}

#3 ./PhalApi/PhalApi/DI.php 文件
public static function one() {
if (self::$instance == NULL) {
self::$instance = new PhalApi_DI();
self::$instance->onConstruct();
}

return self::$instance;
}


#4 ./PhalApi/PhalApi/DI.php 文件
public function onConstruct() {
$this->request = 'PhalApi_Request';
$this->response = 'PhalApi_Response_Json';
}

第二个阶段,即PhalApi_Request与PhalApi_Response_Json实例的初始化,则分别在使用到DI()->request和DI()->response时进行延时加载(即实例化)。

其中,DI()->request初始化是在文件:./PhalApi/PhalApi/ApiFactory.php 第37行:
    static function generateService($isInitialize = TRUE) {

        $service = DI()->request->get('service', 'Default.Index');
DI()->response初始化是在文件:./PhalApi/PhalApi.php 第50行:
    public function response() {
$rs = DI()->response;


 

istrive - 很爱吃炸酱面

赞同来自:

谢谢,明白了依赖注入,自动绑定,非常感谢

要回复问题请先登录注册