11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PhpStormでPHPクラスの完全修飾名を書く

Last updated at Posted at 2015-06-10

最近のPHPでは、深い名前空間に入ったクラスの完全修飾名を 文字列として 指定する必要があることが多々あります。

return [
    'container' => [
        'module1' => [ 'class' => '\hoge\fuga\some\ModuleOne' ],
        'module2' => [ 'class' => '\hoge\fuga\another\ModuleTwo' ],
        // ... more
    ]
]

PHP5.5 以上なら Module::class でもいいし、Yii2 のコンポーネントなら Module::className() として、あとは PhpStorm の自動インポートで use を補ってもらうという手もあります。

use hoge\fuga\some\ModuleOne;
use hoge\fuga\another\ModuleTwo;

return [
    'container' => [
        'module1' => [ 'class' => ModuleOne::class ],
        'module2' => [ 'class' => ModuleTwo::class ],
        // ... more
    ]
]

が、これには2つの罠があります

  • 記述箇所がPHPで実行されなければなりません。つまりYaml等ではアウトです。
  • Yii 方式の場合は autoloader が動いてしまい、該当する *.php が実行されてしまいます。(訂正)

もし autoloader が動いてしまうと、最初に設定ファイルを読み込んだら、アプリケーションで使うクラスを全てロードするまで待たされたうえ、自分の機能に来る前にメモリをだいぶ削られているかもしれません。レスポンスが終わるまで全く使わないクラスを読み込んでいるかもしれないのです。(純粋に ::class だけ使っているうちは起きないはずです / 訂正)

というわけで、 PHPクラスの完全修飾名を文字列として 簡単に得る方法を。

スクリーンショット 2015-06-10 19.52.38.png

ここを右クリックして「Copy Reference」はいこれだけ。

\League\Flysystem\AwsS3v3\AwsS3Adapter がクリップボードに入ります。あとは、たとえばこういうところにペタっと貼り付け。

app:
  filesystem:
    adapter:
      class: '\League\Flysystem\AwsS3v3\AwsS3Adapter'
      credentials:
        key: ...
        secret: ...
      region: ...
      version: ...

かんたん

11
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?