欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    php框架|

    php框架-

    廚房app源碼,安裝很慢,昆侖系統(tǒng)和,ROSE配置,數(shù)據(jù)怎么錄入,分段進(jìn)度條插件,web前端怎么建框架,爬蟲那種做藥材,遍歷文件PHP,百度seo分析工具,在線考試系統(tǒng)網(wǎng)絡(luò)考試網(wǎng)站源碼下載,激活碼網(wǎng)頁源碼,企業(yè)模板,主頁面框架, 管理系統(tǒng),pt站點(diǎn)程序lzw

    源碼,下載安裝包, win游戲,如何創(chuàng)建jsp, 爬蟲學(xué)習(xí),hrm php,河南短視頻seo優(yōu)化專業(yè)布局,網(wǎng)站通欄廣告制作教程lzw

    前文中我們簡單的梳理了一下容器js在容器里面加進(jìn)度條,接下來就是對其中一個細(xì)節(jié)進(jìn)行深度分析。

    c 聊天源碼, 關(guān)閉vim,中關(guān)村,的class,視頻采集 ,商品對比插件2.0,前端框架技術(shù)制作專題網(wǎng)站交流,大數(shù)據(jù)網(wǎng)絡(luò)爬蟲應(yīng)用, php,seo技巧pdf下載,淘客網(wǎng)站商品采集,登錄網(wǎng)頁特效,婚禮請柬文字模板微信lzw

    實(shí)例調(diào)用make方法

    本文沒有太多文字解析,都在代碼注釋中說明了執(zhí)行過程。

    代碼::()返回了的實(shí)例后,就會去調(diào)用本類的make方法,接下來就是對make方法進(jìn)行詳解了。

    在容器里面加進(jìn)度條_js在容器里面加進(jìn)度條_手游方舟中龍頭樹脂里面放什么容器

    在開始閱讀make方法里邊的源碼之前,我們需要先對幾個屬性進(jìn)行簡單的梳理一下。

    這四個屬性一定要有點(diǎn)印象,并且一定要區(qū)別和。

    這倆個屬性一個是單例模式返回當(dāng)前類的實(shí)例js在容器里面加進(jìn)度條,一個是容器中的所有的實(shí)例。

    第一次執(zhí)行結(jié)果

       /**
    * 創(chuàng)建類的實(shí)例
    * @access public
    * @param string $abstract 類名或者標(biāo)識
    * @param array|true $vars 變量
    * @param bool $newInstance 是否每次創(chuàng)建新的實(shí)例
    * @return object
    */
    public function make($abstract, $vars = [], $newInstance = false)
    {
    // 判斷$vars這個變量是否為true
    if (true === $vars) {
    // 總是創(chuàng)建新的實(shí)例化對象
    $newInstance = true;
    $vars = [];
    }
    // app 這里就是在容器別名里獲取傳遞過來的app 如果沒有則就是app
    $abstract = isset($this->name[$abstract]) ? $this->name[$abstract] : $abstract;

    // 從容器實(shí)例中獲取 如果存在則直接返回對應(yīng)的實(shí)例 也就是使用注冊樹模式
    if (isset($this->instances[$abstract]) && !$newInstance) {
    return $this->instances[$abstract];
    }
    // think\App 從容器標(biāo)識中獲取
    if (isset($this->bind[$abstract])) {
    // 將think\App 復(fù)制給$concrete變量
    $concrete = $this->bind[$abstract];
    // 用于代表匿名函數(shù)的類 判斷是不是閉包
    if ($concrete instanceof Closure) {
    $object = $this->invokeFunction($concrete, $vars);
    } else {
    // $this->name['app'] = think\App
    $this->name[$abstract] = $concrete;
    // 在執(zhí)行一次本類的make方法,也就是本方法
    return $this->make($concrete, $vars, $newInstance);
    }
    } else {
    $object = $this->invokeClass($abstract, $vars);
    }
    if (!$newInstance) {
    $this->instances[$abstract] = $object;
    }
    return $object;
    }

    這是第二次執(zhí)行流程

        public function make($abstract, $vars = [], $newInstance = false)
    {
    // 判斷$vars這個變量是否為true
    if (true === $vars) {
    // 總是創(chuàng)建新的實(shí)例化對象
    $newInstance = true;
    $vars = [];
    }
    // app 這里就是在容器別名里獲取傳遞過來的app 如果沒有則就是app
    // 第二次執(zhí)行時 $abstract = think\App
    $abstract = isset($this->name[$abstract]) ? $this->name[$abstract] : $abstract;
    // 從容器實(shí)例中獲取 如果存在則直接返回對應(yīng)的實(shí)例 也就是使用注冊樹模式
    if (isset($this->instances[$abstract]) && !$newInstance) {
    return $this->instances[$abstract];
    }
    // think\App 從容器標(biāo)識中獲取
    // 第二次執(zhí)行$this->bind['think\App']不存在走else
    if (isset($this->bind[$abstract])) {
    // 將think\App 復(fù)制給$concrete變量
    $concrete = $this->bind[$abstract];
    // 用于代表匿名函數(shù)的類 判斷是不是閉包
    if ($concrete instanceof Closure) {
    $object = $this->invokeFunction($concrete, $vars);
    } else {
    // $this->name['app'] = think\App
    $this->name[$abstract] = $concrete;
    // 在執(zhí)行一次本類的make方法,也就是本方法
    // think\App
    return $this->make($concrete, $vars, $newInstance);
    }
    } else {
    // think\App
    $object = $this->invokeClass($abstract, $vars);
    }
    if (!$newInstance) {
    // 把創(chuàng)建的容器存起來
    //$this->instances['think\App'] = $object;
    $this->instances[$abstract] = $object;
    }
    return $object;
    }

    public function invokeClass($class, $vars = [])
    {
    try {
    /**
    * ReflectionClass Object
    (
    [name] => think\App
    )
    */
    // 這里就是之前文章提到的反射
    $reflect = new ReflectionClass($class);
    if ($reflect->hasMethod('__make')) {
    $method = new ReflectionMethod($class, '__make');
    if ($method->isPublic() && $method->isStatic()) {
    $args = $this->bindParams($method, $vars);
    return $method->invokeArgs(null, $args);
    }
    }
    // 通過反射獲取think\App的構(gòu)造函數(shù)
    $constructor = $reflect->getConstructor();
    $args = $constructor ? $this->bindParams($constructor, $vars) : [];
    // 從給出的參數(shù)創(chuàng)建一個新的類實(shí)例
    return $reflect->newInstanceArgs($args);
    } catch (ReflectionException $e) {
    throw new ClassNotFoundException('class not exists: ' . $class, $class);
    }
    }

    執(zhí)行流程圖

    既然把代碼都理清楚了,這時來理一下執(zhí)行的流程圖可以看的更清晰。

    堅(jiān)持學(xué)習(xí)、堅(jiān)持寫博、堅(jiān)持分享是咔咔從業(yè)以來一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有