最近の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クラスの完全修飾名を文字列として 簡単に得る方法を。
ここを右クリックして「Copy Reference」はいこれだけ。
\League\Flysystem\AwsS3v3\AwsS3Adapter
がクリップボードに入ります。あとは、たとえばこういうところにペタっと貼り付け。
app:
filesystem:
adapter:
class: '\League\Flysystem\AwsS3v3\AwsS3Adapter'
credentials:
key: ...
secret: ...
region: ...
version: ...
かんたん