91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么讓Composer的autoload支持自定義文件后綴名

發布時間:2020-12-09 10:35:03 來源:億速云 閱讀:160 作者:小新 欄目:軟件技術

這篇文章主要介紹怎么讓Composer的autoload支持自定義文件后綴名,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

PHP的Composer工具規范了我們對系統各種資源庫的加載格式,借助于PHP的自動加載機制,可以很大程度上簡化在應用開發過程中的類庫文件引用場景。但到目前為止,它有個不是問題的問題,就是文件后綴名只支持.php,而基于某些框架開發的舊資產,類文件的后綴名是.class.php,想使用Composer的自動加載規范,就不太純粹了,一般要兩者混著用,或者修改其他框架下的加載規則。

有沒有省事點的解決辦法呢?

首先只要能產生這么一個疑問,就贏了。而答案呢,多半能找到的。

Composer實現自動加載機制的代碼非常簡練,稍微看一下就能看懂。

當看到ClassLoader.php文件中的findFileWithExtension方法時參數里出現了一個$ext,也就看到希望。只要在適當的時機,能覆蓋這個$ext參數就搞定。

其原始代碼如下:

private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
                            return $file;
                        }
                    }
                }
            }
        }
        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }
        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {

稍微修改一下:

怎么讓Composer的autoload支持自定義文件后綴名

autload_psr4.php 配置文件中,對應的格式變化:

return array(
    'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu’),
    // 字符串格式改為二維數組格式
    ‘Liniu\\' => array([$vendorDir . ‘/Liniu/php-sdk/src/Liniu’, ‘.class.php']),
);

貼出代碼:

private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR);
        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
                        $_ext = $ext;
                        $_dir = $dir;
                        if (is_array($dir) && count($dir) == 2) {
                            $_ext = $dir[1];
                            $_dir = $dir[0];
                        }
                        if (file_exists($file = $_dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4 . $_ext, $length))) {
                            return $file;
                        }
                    }
                }
            }
        }
        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4 . $ext)) {
                return $file;
            }
        }
        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4 . $ext, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4 . $ext, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {

編碼,有一種純粹的樂趣。

以上是“怎么讓Composer的autoload支持自定義文件后綴名”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸城市| 长宁县| 东乡县| 泌阳县| 昌邑市| 沈丘县| 东乌珠穆沁旗| 芦溪县| 横山县| 台山市| 景宁| 金寨县| 昌吉市| 临沭县| 中江县| 德惠市| 龙岩市| 宁陕县| 宣化县| 滦平县| 肥东县| 乌拉特前旗| 金阳县| 石棉县| 平南县| 海口市| 灵台县| 普兰县| 柞水县| 扬州市| 文登市| 光泽县| 牙克石市| 淳化县| 江安县| 哈密市| 盘锦市| 都江堰市| 乐昌市| 靖江市| 达日县|