這篇文章主要介紹怎么讓Composer的autoload支持自定義文件后綴名,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司主打移動網(wǎng)站、成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、主機域名、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。PHP的Composer工具規(guī)范了我們對系統(tǒng)各種資源庫的加載格式,借助于PHP的自動加載機制,可以很大程度上簡化在應(yīng)用開發(fā)過程中的類庫文件引用場景。但到目前為止,它有個不是問題的問題,就是文件后綴名只支持.php,而基于某些框架開發(fā)的舊資產(chǎn),類文件的后綴名是.class.php,想使用Composer的自動加載規(guī)范,就不太純粹了,一般要兩者混著用,或者修改其他框架下的加載規(guī)則。
有沒有省事點的解決辦法呢?
首先只要能產(chǎn)生這么一個疑問,就贏了。而答案呢,多半能找到的。
Composer實現(xiàn)自動加載機制的代碼非常簡練,稍微看一下就能看懂。
當(dāng)看到ClassLoader.php文件中的findFileWithExtension方法時參數(shù)里出現(xiàn)了一個$ext,也就看到希望。只要在適當(dāng)?shù)臅r機,能覆蓋這個$ext參數(shù)就搞定。
其原始代碼如下:
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 {
稍微修改一下:
autload_psr4.php 配置文件中,對應(yīng)的格式變化:
return array( 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu’), // 字符串格式改為二維數(shù)組格式 ‘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支持自定義文件后綴名”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:怎么讓Composer的autoload支持自定義文件后綴名-創(chuàng)新互聯(lián)
標(biāo)題來源:http://m.rwnh.cn/article4/iiooe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、定制網(wǎng)站、App開發(fā)、虛擬主機、服務(wù)器托管、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容