2014-08-29 51 views
1

我在PHP中遇到一些與命名空間有關的問題。PHP在作曲家的供應商軟件包上定義命名空間

我已經掌握了一切,並在我的項目中工作,這一切都運行良好。我使用作曲家的自動加載功能來自動加載我的所有項目類。

最近我需要通過composer爲securimage引入依賴(captcha應用程序)。我有問題是,它不會工作,直到我去編輯文件,插入在每個PHP腳本:

<?php namespace vendor\dapphp\securimage; 

我composer.json文件使用PSR-4,如果頂部以下這有助於確定我要出錯的地方。

"psr-4": { 
      "vendor\\dapphp\\securimage\\": "vendor/dapphp/securimage" 
     } 

我的情況下,問題不是很明顯我怎麼拉作曲家供應商項目和使PHP自動插入/瞭解到,這些應該命名空間

vendor\{userid}\{projectid} 

下放置不編輯實際內的文件。

我確定我錯過了composer.json文件中的內容?

回答

1

你還沒有真的錯過任何東西。這取決於一個命名空間的源代碼包。除非源代碼字面上包含namespace聲明,否則代碼位於全局名稱空間中。在不更改所有涉及的源代碼的情況下,您無法改變這一事實。 Securimage代碼不是命名空間,句點。

"psr-4": { 
    "vendor\\dapphp\\securimage\\": "vendor/dapphp/securimage" 
} 

這只是配置自動裝載機。意思是,你應該嘗試在命名空間vendor\dapphp\securimage\...中加載一個類,Composer的自動加載器知道在哪裏找到它。它不會將代碼放置在這個名稱空間中。

+0

謝謝你的回答。那麼當將來他們決定命名空間的時候會發生什麼,而且我已經掌握了一切,以解決他們在全局命名空間中的類問題? – Dal 2014-08-29 09:33:37

+0

然後你將不得不更新你的代碼。 :)把一些東西放入一個名字空間基本上和重命名所有東西或改變一個函數簽名一樣。它必然打破向後兼容性,沒有真正的方法來避免它。 – deceze 2014-08-29 09:35:21

+0

我以爲我是通過使用名稱空間來做正確的事情。我沒想到最終會有第三方阻礙我自己的項目。他們真的沒有做好這個命名空間的事情,因爲它感覺像是最後一分鐘的黑客攻擊。 我想我只是分叉項目和更新他們的代碼,所以至少我有一些控制它。非常感謝,你已經滿足了我的問題 - 非常感謝你! :) – Dal 2014-08-29 09:40:07

相關問題