php-composer - PHP composer 包管理和class類自動載入有什麼聯絡?越詳細越好

來源:互聯網
上載者:User
PHP composer 包管理和class類自動載入有什麼聯絡?越詳細越好

回複內容:

PHP composer 包管理和class類自動載入有什麼聯絡?越詳細越好

本質而言兩者關聯不大

  1. 自動載入是spl_autoload_register註冊的自動載入函數實現(通過重載__autoload函數也可以實現,不過不推薦,這樣一來只能有一個autoload函數),你可以自己寫這個函數,一般來說需要包括對namespace和class類名的解析,並且把它include進來。所有註冊的自動載入函數會在PHP找不到某個類的時候依次觸發。(這裡的函數是一個callable對象,包括:類方法(動靜皆可),Closure閉包(Lambda函數),普通函數)

  2. composer通過每個包的composer.json提供的require的配置來管理組件之間的依賴,並且同時它提供了一個autoload的實現來載入這些包下面的類

  3. 只要你的代碼的類的儲存路徑是按照PSR-4標準(推薦)和PSR-0標準來規劃的,你可以利用composer的autoload來管理你自己的類,這個稍微去翻下composer的文檔即可

所以composer是個包管理器,它管理的是包而不是類,不過提供了一個載入這些包內類的autoload實現,但不妨礙你自己實現一個你自己的。

  • spl_autoload_register: http://php.net/manual/zh/function.spl-autoload-register.php

  • PSR-4: http://www.php-fig.org/psr/psr-4/ 漢化: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md

  • PSR-0: http://www.php-fig.org/psr/psr-0/ 漢化: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-0-cn.md

完全兩個東西嘛
composer是把你依賴的項目從源安裝,舉個不是很恰當的例子,Linux系統有很多包都是相互依賴的,當package A以來package B時,B也會安裝.
類自動載入是你不大可能只用一個檔案或者class就處理完所有業務,比如說MVC架構,不同controller之間可能要相互調用,controllerA.php檔案裡沒有controllerB.php的代碼,只能通過類的自動載入實現.將controllerB.php載入進 A 的上下文.
這兒有一篇講解PHP自動載入機制的可以看看PHP自動載入器

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.