Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tanakahisateru

PhpStorm で @internal アノテーションを活用する方法

PHP には現在、クラスの利用をパッケージプライベートアクセスに制限する方法がありません。他人に直接使われたくない内部用クラスを切り出すのを躊躇してしまいます。

Doc コメントでクラスに @internal アノテーションを付けると、むやみに外から使わないでほしい意図を表明はできます。が、これだけでは気休めにしかなりません。

<?php
namespace App\Module1;

/**
 * @internal
 */
class InternalClass
{
}

PhpStorm でこのアノテーションをじっさいに活かす方法を紹介します。

PhpStorm は @internal を名前空間ローカルではなく、パッケージ全体のローカルな内部クラスとして扱います。ここでいうパッケージというのは、vendor のサブフォルダに入るディレクトリ粒度のイメージです。

プロジェクトの src 内にある「別のパッケージのように扱いたい横並びのディレクトリ」を、それぞれ再度、Source Root と定義すると、そこから下が独立したパッケージのように認識されます。

image.png

Module1 と Module2 を異なるパッケージとすると、Preferences の Directories はこうなります。

image.png

同一パッケージ内でならなんの警告もなく利用できます。

image.png

しかし、異なるパッケージからの InternalClass の名指しは警告になります。

image.png

image.png

独立したライブラリのようなきれいに切り出した部分にそれぞれ Source Root 定義をしておけば、うっかり内部利用専用のクラスを使ってしまうミスに気づくのに役立ちます。

という警告のサポートがあるとはいえ、コード補完にはサジェストされるし、プロジェクトツリーでは他のクラスと同じアイコンに見えるので、いざ書いてみるまではダメが出るかわかりません。

他人の理解を促す (外からどのクラスを使ったらいいのか初見でわかるなど) には向いていないかもしれませんが、自分が @internal を付けて表明するべきかどうかを考える習慣づけにはなると思います。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?