国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

(轉)詳解spl_autoload_register()函數

xcc3641 / 3179人閱讀

摘要:看到一篇不錯的博文,轉載過來,可以通過這個自動加載函數來理解的類自動加載原理。在了解這個函數之前先來看另一個函數。調用靜態方法另一種寫法小結實例化時會被自動觸發該函數,如果沒有執行的對象時,就會執行該方法。

看到一篇不錯的博文,轉載過來,可以通過這個自動加載函數spl_autoload_register()來理解PHP的類自動加載原理。

在了解這個函數之前先來看另一個函數:__autoload

一、__autoload

這是一個自動加載函數,在PHP5中,當我們實例化一個未定義的類時,就會觸發此函數。看下面例子:

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

運行index.php后正常輸出hello world。在index.php中,由于沒有包含printit.class.php,在實例化printit時,自動調用__autoload函數,參數$class的值即為類名printit,此時printit.class.php就被引進來了。

在面向對象中這種方法經常使用,可以避免書寫過多的引用文件,同時也使整個系統更加靈活。

二、spl_autoload_register()

再看 spl_autoload_register(),這個函數與__autoload有與曲同工之妙,看個簡單的例子:

doPrint();
?>

將__autoload換成loadprint函數。但是loadprint不會像__autoload自動觸發,這時spl_autoload_register()就起作用了,它告訴PHP碰到沒有定義的類就執行loadprint()。

spl_autoload_register() 調用靜態方法

doPrint();
?>

小結:實例化時__autoload會被自動觸發該函數, 如果沒有執行的對象時,就會執行spl_autoload_register該方法。

三、composer類自動加載研究

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;
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30586.html

相關文章

  • 詳解spl_autoload_register()函數

    摘要:在了解這個函數之前先來看另一個函數。一這是一個自動加載函數,在中,當我們實例化一個未定義的類時,就會觸發此函數。在中,由于沒有包含,在實例化時,自動調用函數,參數的值即為類名,此時就被引進來了。 在了解這個函數之前先來看另一個函數:__autoload。 一、__autoload 這是一個自動加載函數,在PHP5中,當我們實例化一個未定義的類時,就會觸發此函數。看下面例子: pr...

    hss01248 評論0 收藏0
  • PHP autoload 機制詳解

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

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

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

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

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

    stormzhang 評論0 收藏0
  • 自動加載與命名空間

    摘要:不傳參數,直接調用,會默認調用來加載類,如果后面再調用有傳參數的,也會失效的如果使用了命名空間,那么會把路徑和類名一同帶過來的。 自動加載 兩種實現方式 1、__autoload(); 2、spl_autoload_register(); (主要使用) __autoload()現在很少使用,因為使用這種方式,在一個系統的實現中,假如需要使用很多其它的類庫,這些類庫可能是由...

    songjz 評論0 收藏0

發表評論

0條評論

xcc3641

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<