LeanCloud中的PHP autoload

官方是這么說的 自動加載類

很多開發者寫面向對象的應用程序時對每個類的定義建立一個 PHP 源文件。一個很大的煩惱是不得不在每個腳本開頭寫一個長長的包含文件列表(每個類一個文件)。 在 PHP 5 中,不再需要這樣了??梢远x一個 __autoload() 函數, 它會在試圖使用尚未被定義的類時自動調用。通過調用此函數,腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類。

最新的發展情況是

tip:
spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動加載。因此,不再建議使用 __autoload()函數,在以后的版本中它可能被棄用。

一點想法

<pre>
相較于.Net的Namespace, PHP的namespace除了用來方便引用class,組織代碼結構,也用來提供需要文件的路徑查找。
腳本語言與編譯型語言的差異可見一斑。
</pre>

下面是LeanCloud的autoload
主要思路是通過$classname 拆分出是否是leancloud的class,并通過分解namespace classname得到php文件的路徑,并require到項目中來。

/**
 * Enable autoload
 * 
 * Require this file to enable autoload SDK classes on the fly. If you're
 * using composer, it should be required automatically.
 *
 * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
 *
 * @param string $class 完整的class名字.
 * @return void
 */

spl_autoload_register(function ($class) {

    // project-specific namespace prefix
    $prefix = 'LeanCloud\\';

    // base directory for the namespace prefix
    $base_dir = __DIR__ . '/LeanCloud/';

    // does the class use the namespace prefix?
    /* 
      strlen 獲取leanCloud字符的長度,
      strncmp **判斷兩個字符串前n個字符是否相等,區分大小寫**
      比較截取長度為$len的兩個字符串是否一致 
    */
    
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        // no, move to the next registered autoloader
        return;
    }

    // get the relative class name
    $relative_class = substr($class, $len);

    // replace the namespace prefix with the base directory, replace
    // namespace separators with directory separators in the relative
    // class name, append with .php
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

    // if the file exists, require it
    if (file_exists($file)) {
        require $file;
    }
});

擴展閱讀
require()、require_once()、include()和include_once()的區別

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在PHP開發過程中,如果希望從外部引入一個class,通常會使用include和require方法,去把定義這...
    四月不見閱讀 1,083評論 0 0
  • 一、數組 1、數組定義 數組就是一個鍵值對組成的語言結構,鍵類似于酒店的房間號,值類似于酒店房間里存儲的東西。 $...
    空谷悠閱讀 814評論 4 11
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,251評論 25 708
  • 課程準備知識 熟悉和了解數據結構的節本概念 熟悉PHP代碼的編寫 熟悉面向對象的概念 什么是 SPL SPL的基...
    followyounger1閱讀 700評論 0 3
  • 家有小女兩歲半,恬靜乖巧稍內斂。 平穩進入幼兒園,作息規律大改觀。 積木兒歌啊愛玩,游戲小曲兒喜歡。 感謝老師耐心...
    愛詩的魚兒閱讀 1,193評論 2 5