2016-11-05 87 views
2

我看過這個question,但不幸的是沒有答案。PhpStorm不識別班別名

我正在使用PhpStorm,我正在構建一個加載了作曲家項目的項目。我試圖讓PhpStorm識別我的類/函數,當我點擊它們時,特別是通過作曲者安裝的項目。

我試過改變Source FoldersSettings/Directories但我仍然無法得到這個工作。

我正在使用 require __DIR__ . '/vendor/autoload.php';加載我的作曲家依賴關係。

對於PhpStorm從通過作曲者加載的文件中識別我的聲明,我需要做些什麼?


爲了支持我的問題,這裏是一些圖片:

我的test.php文件:(注意它怎麼能不認識我的課): project/test.php enter image description here

一個項目通過作曲者添加並使用自動加載器安裝: project/vendor/braintree/braintree_php/lib/Braintree/Subscription.php enter image description here

我composer.json文件:project/composer.json enter image description here

回答

2

嗯...技術上那個包沒有Braintree_Subscription類中定義的(我的意思是 - 「正確」 的定義)。您的第二個屏幕截圖顯示\Braintree名稱空間的Subscription類的定義。

這裏是一個文件:https://github.com/braintree/braintree_php/blob/master/lib/Braintree/Subscription.php

通知的最後一行 - 即「未定義」類中提到有調用class_alias()功能時:

class_alias('Braintree\Subscription', 'Braintree_Subscription'); 

它看起來像你的PhpStorm不明白這樣的類定義。


下面是PhpStorm的問題跟蹤門票:WI-11936 - 因此它已經被固定在2016年11月3日(2天前,基本上)的車票。該修補程序(類別別名支持)將在下一個主要版本中提供,即2016.3

您可能會等到它正式發佈(大約在月底)或者嘗試下一步 EAP或RC版本(請看他們的blog或通過twitter發佈)。


現在(當前和過去的穩定版本:2016.2及以上)的解決方案是在你的代碼中使用「真實」的類名(\Braintree\Subscription)而不是別名(Braintree_Subscription)。

但在任何情況下:在您自己的新代號使用真實類是最正確的方式 - 離開類的別名爲需要一些遺留/兼容性支持情況和其他邊緣情況。


P.S. 這與Composer無關 - 完全沒有。

它只是示例代碼 - 無論出於何種原因(可能遺留/ ..或更容易爲新PHP用戶,不知道兼容性的原因),他們使用的是類的別名,而不是真正的類名和PhpStorm不理解這些別名。

+0

絕對遺產,如果你檢查https://github.com/braintree/braintree_php/blob/acd947620ede287b4f3b367435ddfc68a2e44e13/lib/Braintree/Subscription.php你會發現這個文件在v2中有傳統的文件名。 v3的正確用法通常是使用新的類名稱 – JimL

+0

謝謝@JimL的澄清。 PHP中的命名空間自v5.3(IIRC)可用,此軟件包的2.x版本支持5.2和5.3。所以對於目前的v3(需要5.4 PHP)*我認爲*他們應該更新他們的文檔以使用當前/真正的類名稱... – LazyOne

+0

是的你完全正確@LazyOne,它與作曲家無關。我真的不知道問題出在哪裏,所以我試圖解決問題。因爲我還沒有真正使用過作曲家,所以我只是假設問題出在哪裏。期待看到Phpstorm支持'class_alias'!非常感謝您爲此找出了配偶 – LukeXF