日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

composer 路径_深入学习Composer原理(三)

發(fā)布時間:2024/7/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 composer 路径_深入学习Composer原理(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本系列第三篇文章,一起了解下PSR規(guī)范中的PSR4和PSR0規(guī)范

首先恭喜大家,包括我自己,堅持到了現(xiàn)在。這篇文章之后,Composer的基礎原理就清晰明了咯。也就是說,Composer所利用的正是spl_autoload_register()和PSR4規(guī)范,然后通過線上服務器存儲包,來實現(xiàn)包管理的功能。spl_autoload_register()的作用我們已經清楚了,主要就是動態(tài)加載我們所需要的文件。然而我們的文件不可能都亂七八糟的隨便找個目錄放下,然后注冊一堆的spl_autoload_register()來加載吧,要真這么寫,估計你的老板會廢了你。在這個時候,PSR路徑規(guī)范的作用就顯示出來咯!!

本文參考PSR規(guī)范:https://psr.phphub.org/

PSR4的格式

<命名空間>(<子命名空間>)*類名

具體的內容直接上文中提供的參考鏈接,這里總結重要的幾點:

  • 頂級命名空間必須有一個
  • 子命名空間可以多個或沒有
  • 類名必須有
  • 大小寫敏感,下劃線無實際意義(注意,下劃線是主要的和PSR0的區(qū)別)

類名與文件載入的對應

  • 去掉最前面的命名空間的分隔符,前面的命名空間作為[命名空間前綴],必須與至少一個[文件基目錄]對應
  • 子命名空間與[文件基目錄]下的文件夾對應,命名空間分隔符號作為目錄分隔符號
  • 末尾的類名,與最終目錄下的對應的.php文件相同
  • autoload的實現(xiàn)不可出現(xiàn)異常,也就是要解決掉異常問題

估計各位看得一臉懵逼吧!!

其實很好理解,舉例說明,我們先建立一個目錄叫myvendor,里面放著常用的工具包,如圖:

那么TestClass.php的命名空間應該是Test,而CaseClass的應該是CaseModelCaseChild。統(tǒng)一從myvendor這個文件夾作為入口進入。也就是myvendor是一個超級[基目錄],然后Test和CaseModel是對應命名空間的兩個[文件基目錄],剩下的子個名空間與目錄對應。官網中還有其他的展示方式,但在這里我們用這種最標準的方式。

其實說白了,就是命名空間和目錄對應上,寫代碼找文件就方便得很啦!!

上面說的是PSR4的規(guī)范,那么PSR0又是什么鬼?目前來說PSR0已經廢棄了,它們兩個大部分內容還是相近的,最大的區(qū)別在于PSR0中的_這個符號是有意義的,也就是/namespace/package/Class_Name這樣的內容,會去提供/namespace/package/Class/Name.php文件,而PSR4中則忽略_這個符號的意義,還是去查找Class_Name.php這個文件。

TestClass.php代碼<?phpnamespace Test;class TestClass {public function show(){echo "we are family!n";} }CaseClass.php代碼<?phpnamespace CaseModelCaseChild;class CaseClass {public function show(){echo "Good!n";} }

接下來,在myvendor目錄外面添加一個psr4.php文件,代碼如下:

<?phpspl_autoload_register(function ($class) {$vendor = __DIR__ . '/myvendor';$file = $vendor . '/' . str_replace('', '/', $class) . '.php';if (file_exists($file)) {require $file;} });use CaseModelCaseChildCaseClass; use TestTestClass;$t = new TestClass(); $t->show();$c = new CaseClass(); $c->show();

神奇的事情發(fā)生了,文件自動加載進來了,有點高大上吧,至此,關于Composer的自動加載部分就結束了。我們一起學習到了PHP是如何通過spl_autoload_register方法來自動加載文件,并且通過PSR4規(guī)范來形成約束,讓大家都有一套統(tǒng)一的規(guī)范。而這些,正是Composer的靈魂和肉身。

完整源碼:https://github.com/zhangyue0503/php-blog-code-resource/tree/master/composer/base/psr4namespace

總結

以上是生活随笔為你收集整理的composer 路径_深入学习Composer原理(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。