PhpStorm 2020.3:PHP 8、属性、PHPStanおよびPsalm、Xdebug 3、TailwindCSSおよび共同開発





今年、PhpStormの最後のメジャーリリースを発表できることをうれしく思います。カットの下には、すべての変更と新機能の詳細な分析があります。







PHP 8



PHP8.0がリリースされました。すべての貢献者とリリースマネージャーに感謝します!



PhpStorm 2020.3は、最新の言語変更をすべてサポートしています。利用可能なものとIDEでの使用方法を見てみましょう。



ステータスバーの言語バージョン



これで、ステータスバーにプロジェクトの現在のPHPバージョンが常に表示されます。そこからバージョンを切り替えることもできます。







ラジオボタンがアクティブでない場合は、PHPのバージョン制限がcomposer.jsonに設定されていることを意味します。



名前付き引数



PHP 8では、パラメーター名を指定することにより、関数とメソッドへの引数を渡すことができます。呼び出しは自動的に文書化され、オプションのパラメーターは完全な意味でオプションです。



[名前識別子追加]クイックフィックスを使用すると、引数に名前を追加できます。引数の タイプ







ミスまたは誤った名前が強調表示されます:







渡された値がデフォルトのパラメーター値と一致する場合は、安全に削除できます:







オプション配列の代わりに、名前付き引数を使用してパラメーターのセットを渡すことができます。必要なものだけを渡します。この方法で渡される引数は、配列要素とは異なり、タイプセーフです。







属性



属性は、PHPDocコメントの代わりにPHPでメタデータを指定する新しい構造化された方法です。



属性を作成するには、クラスを宣言してマーカーを追加する必要があります #[Attribute]



ここで、PhpStormは、強調表示、コード補完、使用法の検索、リファクタリングなどを支援します。







PHP自体は、呼び出されReflectionAttribute::newInstance()



ときにのみ属性の有効性をチェックします また、Reflectionを介して属性にアクセスしない場合、不要なクラスをロードしたりオブジェクトを作成したりしないように、属性は完全に無視されます。



ただし、PhpStormは、Reflection APIを実行せずに、エディター内のすべてを検証します。次のルールがチェックされます。



  • 指定されたクラスは実際に属性になることができます。





  • この属性は、許可された場所(クラス、プロパティ、メソッド、パラメーター、関数、またはクラス定数)にのみ適用されます。





  • 属性は、フラグで宣言されている場合にのみ繰り返されますAttribute::IS_REPEATABLE











Symfonyで動作する属性は次のとおりです。










PHP8ストーム属性



PhpStorm 2020.3では、名前名の箱から出してすぐにいくつかの属性を使用できます \JetBrains\PhpStorm\







何も接続せずに、コードベースですぐに使用できます。



ただし、他の静的分析ツールを追加で使用し、Class not foundエラーを受け取りたくない場合 、の依存関係としてJetBrains / phpstorm-attributes属性パッケージ追加する価値があります composer.json









#[非推奨]



この属性をPHPDoc @ deprecatedタグとして使用して、将来削除されるメソッド、クラス、またはクラス定数をマークします。



ここでの利点は、レガシーコードの代替を指定でき、ユーザーがアップグレードしやすくなることです。



実際の例を見てみましょう。最近リリースされた Symfony5.2では、このメソッドは \Symfony\Component\DependencyInjection\Alias::setPrivate()



非推奨になりましたそこ#[Deprecated]



属性を追加 すると、移行を簡素化できます。



#[Deprecated(
   reason: 'since Symfony 5.2, use setPublic() instead',
   replacement: '%class%->setPublic(!%parameter0%)'
)]

      
      













#[ArrayShape]



この属性は、何らかの理由でクラスを宣言できない場合に、単純なデータ構造またはオブジェクトのような配列を操作する場合に役立ちます。



構文は次のようになります。

#[ArrayShape([
// ‘key’ => ’type’,
   ‘key1’ => ‘int’,
   ‘key2’ => ‘string’,
   ‘key3’ => ‘Foo’,
   ‘key3’ => App\PHP 8\Foo::class,
])]
function functionName(...): array

      
      







タイプは、文字列として、またはFQN文字列または定数の形式のクラス参照として指定できます ::class











「形状」を定義する配列は、定数に入れて再利用できます。



const  MY_ARRAY_SHAPE = [];
#[ArrayShape(MY_ARRAY_SHAPE)]

      
      











PhpStorm#[ArrayShape]



では、たとえば、いくつかの標準PHP関数に属性注釈を付けています parse_url()







幸い、単一行の属性構文には下位互換性があります。つまり#[ArrayShape]



、PHP 7プロジェクトで1行を書き込む と、PHPインタープリターはこの行をコメントとして解釈します。



PHPインタープリターとは異なり、PhpStormはとにかく属性を解析します!したがって、プロジェクトでPHP 7.4以下を実行している場合でも、この追加の恩恵を受けることができます #[ArrayShape]









#[不変]



不変オブジェクトは、初期化または作成後に変更することはできません。それらを使用すると、プログラムの状態がより予測可能になり、デバッグが容易になります。



属性 #[Immutable]



を使用して、クラス全体または特定のプロパティをマークして、変更できないことを示すことができます。



PhpStormは、そのようなオブジェクトとプロパティの使用をチェックし、変更の試みを強調表示します。







プロパティの変更は、デフォルトでコンストラクターで許可されていますが、プライベート/保護されたメソッドでも許可できます。これは、定数を使用して行われ CONSTRUCTOR_WRITE_SCOPE



PRIVATE_WRITE_SCOPE



PROTECTED_WRITE_SCOPE



コンストラクタに渡されます #[Immutable]













#[純粋]



この属性は、純粋な関数、つまり副作用を生成しない関数をマークします。そのような関数は、それらの実行の結果がその後使用されない場合、安全に削除できます。







関数がクリーンとしてマークされているが、その本体の外部スコープ外で何かを変更しようとすると、PhpStormは安全でないコードを強調表示します。







すべての標準的な純粋なPHP関数は、PhpStormですでにこの属性でマークされています。





#[ExpectedValues]



この属性を使用して、関数がパラメーターとして受け取る値と返すことができる値を指定できます。



これは実質的にないと同じことです expectedArguments()



.phpstorm.meta.php



唯一の違いは、メタバージョンがかなり補助的であり、属性が他に可能な値がないことを厳密に示していることです。



たとえば、カウント関数について考えてみます。

count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
      
      





2番目の引数は整数ですが、実際には任意の整数ではなく、定数COUNT_NORMAL



またはの 1つです COUNT_RECURSIVE







属性#[ExpectedValues]



が状況を改善する方法は 次のとおりです。







つまり、自動完了が表示され、他の何かが渡されると、エラーが強調表示されます。



可能な値またはビットマスクを指定する方法
:

  • : #[ExpectedValues(values: [1,2,3])]





  • : #[ExpectedValues(values: [‘red’, ‘black’, ‘green’])]





  • : #[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]





  • : #[ExpectedValues(values: [Code::OK, Code::ERROR])]









:

  • #[ExpectedValues(values: [1,2,3])]



    , .

  • #[ExpectedValues(flags: [1, 2, 3])]



    , , 1 | 3



    .

  • #[ExpectedValues(valuesFromClass: MyClass::class)]



    , `MyClass



    `.

  • #[ExpectedValues(flagsFromClass: ExpectedValues::class)]



    , `MyClass`.







別の例#[ExpectedValues]



response()



Laravelからヘルパー連れて行きましょう 2番目のパラメーターとしてHTTPステータスコードを取ります。



2つの問題があります

  • 可能なコードによる自動補完はありません

  • エディタでの値の検証なし









属性を追加してこれを修正しましょう #[ExpectedValues(valuesFromClass: Response::class)]













# [返品不可]



一部の関数は、スクリプトの実行を停止できます。出口点などの機能を属性でマークすると、 #[NoReturn]



制御フロー分析が向上します。









#[言語]



この属性は、RegExp、SQL、DQLなどの一部の言語のテキストを期待する文字列パラメーターに追加できます。



引数については、強調表示と追加のオプションが表示されます。












PHP8の新機能に戻りましょう。



コンストラクターでのプロパティの宣言



通常のプロパティは、[プロモートされたプロパティに変換]クイックフィックスを使用して、プロモートに変換したり、その逆に変換したりでき ます







PhpStormは、プロパティがPHP8で許可されている方法でのみ使用されるようにします。

  • プロパティは、コンストラクターでのみ宣言できます。

  • 抽象コンストラクターで宣言することはできません。

  • この方法でバリアディックプロパティを宣言することはできません。

  • プロパティのタイプを「Callable」にすることはできません。

  • プロパティのオーバーライドは許可されていません。











プロパティが新しい方法で宣言されているが、初期化がコンストラクターの本体に残っている場合、PhpStormはそれを削除することを提案します。







マッチ式



新しい式は似て switch



いますが、厳密な比較を使用しており、変数に割り当てたり、返すことができます。



PhpStormは、ブロックをswitch



に書き換えることできるかどうかを検出 match



、Alt + Enterキーを押すと、クイックフィックスで自動的に







それを行います。新しい式の誤った使用を確認するのは難しい場合があるため、PhpStormはすべてのエラーを強調表示します。









重複する値が条件に見つかります:







1つのブランチとデフォルトのブランチを持つ 一致式は、安全に3値式に置き換えることができます。







また、デフォルトのブランチのみが残っている場合、一致はまったく必要ありません。







最後に、ボディが異なるブランチで同じである場合、それらをマージできます。







Nullsafe演算子



nullをチェックする一連の条件の代わりに、新しい演算子を使用して一連の呼び出しを使用できるようになりました ?->







PhpStormは、演算子の正しい使用法をチェックします。







ハンギングコンマ



関数を呼び出すとき、およびクロージャーリストで、最後の引数の後にコンマを追加できるようになりました use











捕獲しない漁獲量



PHP 8では、変数なしでcatchブロックで例外をキャッチできます。







式を投げる



例外は、矢印関数と短い演算子??



および3値 でスローできるようになりました ? :











省略形thr



使用してタブを押すことができ ます-これは ライブテンプレートです。







定数::オブジェクトのクラス



以前は、オブジェクトのFQNを取得するには、関数を使用する必要がありました get_class()



PHP 8では、呼び出し get_class($object)



を安全にに置き換えることができます $object::class







実際には、Alt + Enterを押すことで、このような置換を行うことができます。::class



PhpStorm定数の誤った使用が強調表示され ます。







文字列の新しい関数:str_contains()、str_starts_with()、str_ends_with()



文字列に特定の単語が含まれているかどうかを確認するにはどうすればよいですか?StackOverflowで最もよく見られるPHPの質問です。PHP 8には、この質問に対する明確な答えがありますstr_contains()



関数を使用します



PhpStorm 2020.3すべての呼び出し strpos()



に置き換えることができます str_contains()











そこも新しいもの str_starts_with()



、と str_ends_with()



決定するために開始または終了ラインの特定の部分文字列かどうか。PhpStormは、呼び出しsubstr()



を新しい代替手段に置き換えることができる場所を強調しています







再分類されたエンジン警告



PHP 8では、スローされる警告のタイプが多くのエラーに対して修正されました。つまり、多くの場合、通知の代わりに、例外またはタイプエラーが発生します。



PhpStormでは、このため、一部の検査には2つの異なる重大度レベルがあります。PHP8用と古いバージョン用です。







これらはすべて、PHP 8で最も注目に値するものです。PHP8にアップグレードすると、小さな変更がたくさん表示されます。





PsalmとPHPStanのサポート



PhpStorm 2020.3では、両方の静的アナライザーを使用して、エディターで直接問題を強調表示できます。







PHPStanまたはPsalmが依存関係として追加されている場合composer.json



、それらの横にツールの設定を開くレンチアイコンが表示され ます。







そこから、検査設定に移動し、エディターで強調表示をオンにすることができます。これは、PHPで適切な検査を選択することによって行われ ます。品質ツール設定/プリファレンス|編集者|検査



️同時に両方ではなく、一方の機器のみをオンにすることをお勧めします。







ここでは、構成ファイルへのパスを指定し、コマンドライン引数を構成することもできます。



️PHPStanは構成ファイルがなくても機能しますが、Psalmはそれを必要とします。ルートディレクトリにpsalm.xml



または が存在する場合 phpstan.neon



、PhpStormはそれらを自動的にプルアップします。



すべての設定が完了したら、任意のファイルを開くと、静的アナライザーからのハイライトが表示されます。バックライトが表示されるまでに少し時間がかかる場合があります。







注釈



すべての詩篇の注釈が @psalm-*



エディターで正しく強調表示されるようになりました。ただし、一般的に、@psalm-



タグからプレフィックス、つまり @psalm-return



-> @return



および@psalm-param



-> を安全に削除できるように なりました @param











タイプサポート



一部のPsalmタイプのサポートを追加し、タグからの情報に基づいて、タイプの推測を改善しました。これにより、チェック、コード生成、および自動完了がより正確になりました。



疑似タイプ

スカラー、数値などのpsalm疑似タイプをサポートします。







タイプの

定数定数結合と*



タグによる指定をサポートし ます。 パラメータ そして var..。







配列のタイプヒント ネストされたものを含め、配列の

説明 array<array-key, Type>



もサポートされています。







Genericsと@tempateGenericの

サポートは、完全に正しい仕様と多くのエッジケースを持たない上級ユーザー向けの機能です。ただし、@template



これがどのように使用されるかを確認するために、Psalm構文に基づいて基本的なサポートを実装することにし ました。



これまでのところ、関数がそのパラメーターの1つを返す場合、最も原始的なケースのみがサポートされます。







, . , . , .


Xdebug 3



人気のあるPHPデバッガーが更新され、構成がはるかに高速で簡単になりました。Xdebug 3の詳細については、アップグレードガイドをご覧 ください



Xdebug 3を構成するには、1つのxdebug.modeオプションで十分です (このように XDEBUG_MODE=debug



)。



また、デフォルトのXdebugポートが変更されました:9000



今では なく 9003



移行を簡素化するために、PhpStormはデフォルトで両方のポートでリッスンします。Xdebugのポート設定およびその他のオプションは、 [設定] / [設定] | [設定]にあります。言語とフレームワーク| PHP | デバッグ









デバッガーの改善



PhpStormのデバッグ機能は、2つの新機能で拡張されました。



インタラクティブなヒント

デバッグモードで、変数の出力を展開してすべてのフィールドを表示できるようになりました。その場で値を変更することもできます。







インラインウォッチ

以前のバージョンでは、ウォッチリストに変数または式を追加して、値の変化を段階的に監視できました。



PhpStorm 2020.3では、コンテキストに時計を直接追加でき、コードの横に表示されます。 ヒントのポップアップで



[インラインウォッチとして追加]をクリックし ます。





または、エディターのコンテキストメニューで[インラインウォッチの追加]クリックし ます。





または、変数を選択して、コンテキストメニューから[インラインウォッチの追加]を選択します





Twigで変数を強調表示して名前を変更する



変数を選択するか、変数にカーソルを置くと、テンプレートでのすべての使用が強調表示されます。また、すべてのオカレンスの名前を変更するには、Shift + F6を押します。









共同開発-CodeWith Me



PhpStorm 2020.3には、Code With Meプラグイン、JetBrainsの新しい共同開発およびペアプログラミングツールが付属してい ます。これを使用すると、開いているプロジェクトを他のユーザーと共有して、リアルタイムで一緒に作業できます。これらの投稿でCodeWithMeの詳細をご覧ください









HTTPクライアント



PhpStormでのGuzzleとHTTPクライアントの統合



Guzzleは、PHPで最も人気のあるHTTPクライアントの1つです。コードのどこかにHTTP要求があり、コード自体を実行せずにそれをテストしたいとします。以前は、すべてのパラメーターを手動でコピーする必要がありました。



PhpStorm 2020.3を使用すると、単純なGuzzleリクエストを.httpファイルに変換できます。リクエストがサポートされている場合は、その横にアイコンが表示されます。それをクリックすると、正しいURL、リクエストパラメータ、メソッド、ヘッダー、本文を含む新しいスクラッチファイルが開きます。







これで、エディターからクエリを実行していじり、プロジェクトにhttpファイルとして保存できます。



ビデオレビュー でHTTPクライアントの詳細をご覧ください


HTTPリクエストをcURLにコピーします



HTTP要求をcURL文字列にエクスポートするには、エディターで要求に対してAlt + Enterを押し、[ cURLに変換]を選択 してクリップボードにコピーします。これで、端末、ドキュメント、または任意のAPIテストツールに挿入できます。









編集者



マークダウンの改善



マークダウンファイルでMermaid.js構文を使用して、チャートやグラフを記述することができます PhpStormは、エディターで直接プレビューをレンダリングできるようになりました。環境設定/設定に含まれる | 言語とフレームワーク| マークダウン







また、一般的なスタイルに従って.mdファイルの内容を再フォーマットすることも可能になりました。⌘⌥L/ Ctrl + Alt + Lを押して完了します。 環境設定/設定で



構成可能 | 編集者| コードスタイル| マークダウン







最後に、エディターの右上隅にある[自動スクロールプレビュー]ボタンをクリックする と、プレビューとテキストのスクロールが同期されます。



スペルチェックと文法チェックの改善



タイプミスと文法の問題をはるかに速く修正できるようになりました。

  • まず、エラーの説明がポップアップウィンドウに表示されます。

  • また、強調表示されたテキストでAlt + Enterキーを押すと、置換オプションが上部に表示され、以前のようにサブアイテムに非表示になりません。









ドラッグアンドドロップでエディターを分割



複数のファイルを並べて開くには、タブを画面の目的のコーナーにドラッグするだけです。







分割モードでファイルを開く別の方法があります-Shift + Enter。

組み合わせは、プロジェクトビューまたはファイル検索結果で選択したファイルをクリックできます







プレビュータブ



ファイルをすばやく表示する必要がある場合は、各ファイルを個別のタブで開く必要はありません。新しい[プレビュー]タブを使用でき ます



これを有効にするには、プロジェクトビューで歯車をクリックし、[ プレビュー]タブ有効にして[シングルクリックでファイルを開く]を選択 ます。 プロジェクトビューの スペースバーを開かずに押してファイル表示







することも できます









IDE



どこでも検索できるようになりました





結果は関連性ごとにグループ化されてい





ます 。Google 計算機 を開かなくても簡単な数学操作を実行





できます。Git履歴で検索できます。





明るいテーマまたは暗いテーマへの自動切り替え



では 環境設定/設定| 外観と動作| 外観| テーマは[ OSと同期]を選択 します







macOS用の新しいホットキーのセット



macOSの代替キーボードショートカットレイアウトは、ファンクションキーの使用を最小限に抑えるため、基本的なアクションを実行するときにキーボード全体に手を伸ばす必要はありません。たとえば、Fn + Shift + F6の代わりに、名前変更リファクタリングは⌥+⌘+ Rを使用します。







macOSホットキーのアイコンの代わりに単語



⌘のようなアイコンの代わりに、Alt、Cmdなどの単語を表示することが



できます。ide.macos.disable.native.shortcut.symbolsオプションによって[レジストリ]セクションで有効になります レジストリにアクセスするには、 Find Action Cmd + Shift + Aを使用して、そこにレジストリを書き込み ます。



さまざまなファイルのデフォルトアプリケーションとしてPhpStormを設定します



設定| [設定] / [エディター] / [ファイルタイプ]をクリックして、[ファイルタイプをPhpStormに関連付ける… ]をクリックします ダイアログボックスで、ファイル拡張子を選択すると、PhpStormで開きます。



macOSでは再起動が必要です。







テンプレートは複数のファイルを生成できます



モジュールのスケルトンやコンボコントローラービューなど、複数のファイルを同時に生成できます。



では 環境設定/設定| 編集者| [ ファイルとコードテンプレート]をクリックして新しいテンプレートを作成し、[子テンプレートファイルの作成 ]アイコンをクリックします タイプの変数は



、[ファイル名]フィールドで使用できます Symfonyでコントローラーとテンプレートを生成する方法の例を次に示します。 ${NAME}





















Gitステージのサポート



[設定] / [設定] | [ステージング領域を有効にする]チェックボックスオンにすることで有効にできます バージョンコントロール| Gitコミット



ツールウィンドウ (Cmd + 0 / Alt + 0)に、ステージングされたファイルとステージングされていないファイルの2つのグループが表示されます。 ステージングされたファイルにファイルを追加するには、その横にある+をクリックします。 または、特定の行選択して、エディターのアイコンで追加することもでき ますこの場合、ファイルからいくつかの変更をコミットして、残りの作業を続行できます。





















DBツール



PhpStormは、DataGripがでてます ボックスで覆われている、 DataGrip 2020.3リリースの概要当社の同僚から。



MongoDBのSQL



これで、MongoDBに対してSQLクエリを使用できます。PhpStorm 2020.3サポートの SELECT-



クエリは JOIN



WHERE



GROUP BY



HAVING



ORDER BY



LIMIT



OFFSET



のすべての機能 MongoDBは 離れて、マップ減らし、フィルタ、およびてみましょう。詳細については、ブログ投稿をご覧ください







ウェブ



いつものように、PhpStormにはWebStorm2020.3からのすべての更新が含まれ ています最も注目すべきは、TailwindCSSのサポートです。



テールウィンドCSS



PhpStormは、HTMLファイル内および@applyディレクティブの後のTailwindクラスを補完します。また、疑似クラスの完了も提供します。



追い風-適用後の完了



HTMLファイルとCSSファイルのクラスにカーソルを合わせると、結果のCSSのプレビューが表示されます。プレビューは、F1 / Ctrl + Qドキュメントポップアップウィンドウのコード完了時にも利用できます。



tailwind-completion-for-pseudo-class-variants



PhpStormは、tailwind.config.jsからのカスタマイズをサポートしています。たとえば、新しい色でテーマを定義すると、ポップアップの自動完了ウィンドウに、カスタム色の名前でクラスが作成されます。



追い風-カスタマイズ-サポート








PhpStorm 2020.3は、「新着情報ページからダウンロードできます



そして、これがリリースの主な機能を示すビデオ(英語)です:





それがすべての時間です。コメントに質問、願い、バグレポート、そしてただの考えをいただければ幸いです。



All Articles