作曲家自動加載背後的邏輯是什麼?它如何將名稱空間映射到特定文件,以及爲什麼我們總是需要使用該類的名稱空間?爲什麼我們需要使用'use namespace'在Laravel要求上課嗎?
1
A
回答
2
- 作曲家自動加載背後的邏輯是什麼?
- 它如何將名稱空間映射到特定文件?
- 爲什麼我們總是需要使用該類的名稱空間?
答案: 3.在很多編程語言使用到具有相同名稱的獨立類的命名空間,但不同的層次 - 這最好的例子就是Eloquent Builder和Query Builder。那麼,想一下'文件路徑'就像在你的硬盤中,你可以說,名爲b.txt
的文件在目錄dir-a
和dir-b
中,但是它們保留了它們自己的內容嗎?無論如何,它不會傷害閱讀the php documentation regarding namespace
(1,2)。作曲家讀取composer.json
來檢查哪個路徑代表一個名稱空間,並且列出每個 php文件,並將它們存儲到autoload_*.php
(如果你問我文件的位置在哪裏,它就在你的/vendor/composer/
的所有內容中,以autoload
開頭。Laravel - 或者更確切地說,Composer - 知道如何通過這些文件加載它們以及它們位於何處。如果您檢查了這些文件,您將會有一個想法。您需要記住Composer的自動加載中的只有慣例是隻有一個文件一個班,它的類名應與文件名完全相同(不含php部分 - 是的,這與PSR-*
有關)
ps。糾正我,如果我是錯了。
1
我們假設您單獨使用autoload
這意味着它不包含範圍(namespace
)。
這意味着如果您安裝了第三方依賴關係,那麼在供應商文件夾中相同名稱的類(很可能會存在)將會出現衝突,導致您的應用程序出現致命錯誤。
作曲家類的自動加載功能也符合PSR-4 Standards。
Composer如何映射文件?
這在composer.json
文件中指定,例如:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
App
將命名空間,並src
將文件夾
這也是單元測試非常有用,你可以做以下只是開發環境:
"autoload-dev":{
"psr-4" : {
"App\\Test\\": "tests/"
}
}
相關問題
- 1. 什麼要求我聲明「using namespace std;」?
- 2. 裝配需要什麼?爲什麼我們使用它們?
- 3. Laravel app.js和app.css爲什麼需要使用?我們可以刪除這些嗎?
- 4. 爲什麼我們需要在JavaScript
- 5. 爲什麼我們在使用「using namespace std」時要使用「#include <iostream>」?
- 6. 我需要兩個xmlns:local =「clr-namespace」嗎?
- 7. 我們爲什麼要使用`realloc`如果我們需要一個'TMP buffer`
- 8. 爲什麼我們需要fieldset標籤?
- 9. 爲什麼我們需要RIA?
- 10. 爲什麼我們需要.htaccess的worpdress?
- 11. 爲什麼我們需要9補丁?
- 12. 我們爲什麼需要纖維
- 13. 爲什麼我們需要BeginGetResponse和BeginRead?
- 14. 爲什麼我們需要TensorFlow tf.Graph?
- 15. 爲什麼我們需要Bower和Nuget?
- 16. 爲什麼我們需要ng-click?
- 17. 爲什麼我們需要`ngDoCheck`
- 18. 爲什麼我們需要設置SONAR_RUNNER_OPTS?
- 19. 爲什麼我們需要Anaconda 2.7?
- 20. 爲什麼我們需要mktemp?
- 21. 爲什麼我們需要ClassMethods和InstanceMethods?
- 22. 爲什麼我們需要ioc容器
- 23. 爲什麼我們需要RBAC許可?
- 24. 爲什麼我們需要scalaz.stream迭代?
- 25. 爲什麼我們需要Buffer.isBuffer方法?
- 26. 爲什麼我們需要WCF
- 27. 爲什麼我們需要addRequestHeader方法?
- 28. 爲什麼我們需要編寫log.isDebugEnabled?
- 29. 我需要什麼類型的課程?
- 30. 我還需要什麼其他課程?
它如何讀取使用的命名空間,以及如何將它轉換爲路徑?它將文件作爲文本讀取,然後找到關鍵字'use'? – bruce
關於'use'和'namespace'的關鍵字嚴格遵守php。 Composer只處理在哪個文件路徑上的哪個命名空間,包含哪些類等 - 它只列出它們,[示例](https://bitbucket.org/BagusTesa/ashadi-delivery-system-ads/src/f4bfdca18e87b3c38b802359b3c30db45d99ba2e/vendor/composer /autoload_classmap.php?at=master&fileviewer=file-view-default)。 –
是的,但如果我不使用'使用'它說沒有找到類。這意味着它以某種方式通過邏輯轉換爲完整路徑。 – bruce