亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

(轉(zhuǎn))詳解spl_autoload_register()函數(shù)

xcc3641 / 3261人閱讀

摘要:看到一篇不錯(cuò)的博文,轉(zhuǎn)載過(guò)來(lái),可以通過(guò)這個(gè)自動(dòng)加載函數(shù)來(lái)理解的類自動(dòng)加載原理。在了解這個(gè)函數(shù)之前先來(lái)看另一個(gè)函數(shù)。調(diào)用靜態(tài)方法另一種寫法小結(jié)實(shí)例化時(shí)會(huì)被自動(dòng)觸發(fā)該函數(shù),如果沒(méi)有執(zhí)行的對(duì)象時(shí),就會(huì)執(zhí)行該方法。

看到一篇不錯(cuò)的博文,轉(zhuǎn)載過(guò)來(lái),可以通過(guò)這個(gè)自動(dòng)加載函數(shù)spl_autoload_register()來(lái)理解PHP的類自動(dòng)加載原理。

在了解這個(gè)函數(shù)之前先來(lái)看另一個(gè)函數(shù):__autoload。

一、__autoload

這是一個(gè)自動(dòng)加載函數(shù),在PHP5中,當(dāng)我們實(shí)例化一個(gè)未定義的類時(shí),就會(huì)觸發(fā)此函數(shù)。看下面例子:

printit.class.php 
 
 
 
index.php 
 
doPrint();
?>

運(yùn)行index.php后正常輸出hello world。在index.php中,由于沒(méi)有包含printit.class.php,在實(shí)例化printit時(shí),自動(dòng)調(diào)用__autoload函數(shù),參數(shù)$class的值即為類名printit,此時(shí)printit.class.php就被引進(jìn)來(lái)了。

在面向?qū)ο笾羞@種方法經(jīng)常使用,可以避免書寫過(guò)多的引用文件,同時(shí)也使整個(gè)系統(tǒng)更加靈活。

二、spl_autoload_register()

再看 spl_autoload_register(),這個(gè)函數(shù)與__autoload有與曲同工之妙,看個(gè)簡(jiǎn)單的例子:

doPrint();
?>

將__autoload換成loadprint函數(shù)。但是loadprint不會(huì)像__autoload自動(dòng)觸發(fā),這時(shí)spl_autoload_register()就起作用了,它告訴PHP碰到?jīng)]有定義的類就執(zhí)行l(wèi)oadprint()。

spl_autoload_register() 調(diào)用靜態(tài)方法

doPrint();
?>

小結(jié):實(shí)例化時(shí)__autoload會(huì)被自動(dòng)觸發(fā)該函數(shù), 如果沒(méi)有執(zhí)行的對(duì)象時(shí),就會(huì)執(zhí)行spl_autoload_register該方法。

三、composer類自動(dòng)加載研究

vendor/autoload.php


autoload_real.php

= 50600 && !defined("HHVM_VERSION") && (!function_exists("zend_loader_file_encoded") || !zend_loader_file_encoded());
        if ($useStaticLoader) {
            require_once __DIR__ . "/autoload_static.php";

            call_user_func(ComposerAutoloadComposerStaticInit83cb48187cf44a304a7a6be5e700ede3::getInitializer($loader));
        } else {
            $map = require __DIR__ . "/autoload_namespaces.php";
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            $map = require __DIR__ . "/autoload_psr4.php";
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            $classMap = require __DIR__ . "/autoload_classmap.php";
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }

        $loader->register(true);

        return $loader;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30586.html

相關(guān)文章

  • 詳解spl_autoload_register()函數(shù)

    摘要:在了解這個(gè)函數(shù)之前先來(lái)看另一個(gè)函數(shù)。一這是一個(gè)自動(dòng)加載函數(shù),在中,當(dāng)我們實(shí)例化一個(gè)未定義的類時(shí),就會(huì)觸發(fā)此函數(shù)。在中,由于沒(méi)有包含,在實(shí)例化時(shí),自動(dòng)調(diào)用函數(shù),參數(shù)的值即為類名,此時(shí)就被引進(jìn)來(lái)了。 在了解這個(gè)函數(shù)之前先來(lái)看另一個(gè)函數(shù):__autoload。 一、__autoload 這是一個(gè)自動(dòng)加載函數(shù),在PHP5中,當(dāng)我們實(shí)例化一個(gè)未定義的類時(shí),就會(huì)觸發(fā)此函數(shù)??聪旅胬樱? pr...

    hss01248 評(píng)論0 收藏0
  • PHP autoload 機(jī)制詳解

    摘要:但現(xiàn)在問(wèn)題來(lái)了,如果在一個(gè)系統(tǒng)的實(shí)現(xiàn)中,如果需要使用很多其它的類庫(kù),這些類庫(kù)可能是由不同的開發(fā)人員編寫的,其類名與實(shí)際的磁盤文件的映射規(guī)則不盡相同。 PHP在魔術(shù)函數(shù)__autoload()方法出現(xiàn)以前,如果你要在一個(gè)程序文件中實(shí)例化100個(gè)對(duì)象,那么你必須用include或者require包含進(jìn)來(lái)100個(gè)類文件,或者你把這100個(gè)類定義在同一個(gè)類文件中——相信這個(gè)文件一定會(huì)非常大。但...

    psychola 評(píng)論0 收藏0
  • PHP 自 5.2 到 5.6 中新增的功能詳解

    摘要:本文將會(huì)介紹自起,直至中增加的新特征。棄用的功能以下幾個(gè)功能被棄用,若在配置文件中啟用,則會(huì)在運(yùn)行時(shí)發(fā)出警告。該類的完整限定名是其中第一個(gè)反斜杠表示全局命名空間。目的在于模仿的不對(duì),目的是為了讓發(fā)布應(yīng)用程序更加方便。 截至目前(2014.2), PHP 的最新穩(wěn)定版本是 PHP5.5, 但有差不多一半的用戶仍在使用已經(jīng)不在維護(hù) [注] 的 PHP5.2, 其余的一半用戶在使用 PHP5...

    番茄西紅柿 評(píng)論0 收藏0
  • 解讀 thinkphp5 源碼(一):自動(dòng)加載

    摘要:索性讀一下它的源碼。行載入類載入類,這個(gè)類比較重要,實(shí)現(xiàn)了自動(dòng)加載。注冊(cè)錯(cuò)誤和異常處理機(jī)制加載慣例配置文件接下來(lái)我們看一下自動(dòng)加載的實(shí)現(xiàn)方法。所以借助此函數(shù)可以達(dá)到自動(dòng)加載。博客鏈接解讀源碼一自動(dòng)加載 聽說(shuō) TP5 已經(jīng) RC4 了,曾經(jīng)在 RC3 的時(shí)候用它寫過(guò)一個(gè)小東西。官方說(shuō)從 RC4 以后改動(dòng)不是太大。索性讀一下它的源碼。然后順便記錄一下,如有錯(cuò)漏,請(qǐng)路過(guò)大神多多指正! 入口 ...

    stormzhang 評(píng)論0 收藏0
  • 自動(dòng)加載與命名空間

    摘要:不傳參數(shù),直接調(diào)用,會(huì)默認(rèn)調(diào)用來(lái)加載類,如果后面再調(diào)用有傳參數(shù)的,也會(huì)失效的如果使用了命名空間,那么會(huì)把路徑和類名一同帶過(guò)來(lái)的。 自動(dòng)加載 兩種實(shí)現(xiàn)方式 1、__autoload(); 2、spl_autoload_register(); (主要使用) __autoload()現(xiàn)在很少使用,因?yàn)槭褂眠@種方式,在一個(gè)系統(tǒng)的實(shí)現(xiàn)中,假如需要使用很多其它的類庫(kù),這些類庫(kù)可能是由...

    songjz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<