2016-11-05 46 views
2

私はこのquestionを見ましたが、残念ながら答えはありません。PhpStormはクラスエイリアスを認識しません

私はPhpStormを使用しており、コンポーザープロジェクトをロードしたプロジェクトをビルドしています。私は、PhpStormが私のクラス/機能をCtrl +クリックすると、特にコンポーザーを介してインストールされたプロジェクトのために認識するようにしています。

私はをSettings/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クラス定義されていません(私は意味 - "適切" の定義を)。 2番目のスクリーンショットは\Braintree名前空間のSubscriptionクラスの定義を示しています。 https://github.com/braintree/braintree_php/blob/master/lib/Braintree/Subscription.php

お知らせ非常に最後の行 - 「未定義」クラスはclass_alias()関数を呼び出すときが記載されていること:ここで

は、そのファイルで

あなたPhpStormは、このような理解していないように見えます
class_alias('Braintree\Subscription', 'Braintree_Subscription'); 

クラス定義。ここで


PhpStormの課題トラッカーからチケットです:WI-11936 - それは2016年11月3日に固定されたチケットに応じて(2日前には、基本的には、)。修正(クラスエイリアスのサポート)は、次のメジャーバージョンで利用できるようになります。2016.3です。

あなたは(発表のための彼らのblogやツイッターを見て)それが正式にリリースされる予定まで待つ(約月末)または EAPまたはRCビルドをしようとします。今


(現在および過去の安定したバージョンについて: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を使用することです。このパッケージのv5​​.3(IIRC)および2.xバージョンは5.2および5.3をサポートしているため、PHPのネームスペースは使用できます。だから、現在のv3(5.4 PHPが必要です)*私は彼らが現在の/実際のクラス名を使用するために彼らのドキュメントを更新する必要があると思う... – LazyOne

+0

はい、あなたは完全に正しいです@ LazyOne、それは作曲家とは関係ありません。私は問題がどこにあるのか本当に分からなかったので、私はそれを解決しようとしていました。私は実際に作曲家をあまり使わなかったので、それは問題がどこにあるのかということだけを考えました。 Phpstormが 'class_alias'をサポートするのを楽しみにしています!これを見つけてくれてありがとう – LukeXF

関連する問題