PhpStorm でファイル作成時にコードテンプレート使うと少し捗るよ (IntelliJ とかも同じはず。)


PhpStorm (IntelliJとかも) に、 Project Tree などから、コンテキストメニューを呼び出し、そこから指定のファイルを作成する機能があります。(あるいは、 cmd + n)

こんなやつ。

例えば、 "PHP Class" を選べば、以下のようなダイアログが出てきます。

この画像の例は laravel を使った Project なので、 composer.json から適切に NameSpace 等を読み込んで事前に入力済み状態になっています。

で、例えば、 NameHogeController と入力して OK を押すと以下のようなファイルが生成されます。

<?php
/**
 * Created by PhpStorm.
 * User: hokutoasari
 * Date: 2019-03-07
 * Time: 12:28
 */

namespace App\Http\Controllers;


class HogeController
{

}

これはこれで良いのですが、 Code Template を使うことで、もうちょっと便利になります。

Code Template を設定して使ってみる

Preferences -> Editor -> File and Code Templates を開きます。

で、例えば、 "PHP Class" を以下のように編集します。

<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end

final class ${NAME} {

}

こうしておくと、さっきの cmd + n から "PHP Class" を選択して生成されるコードが以下になります。

<?php
declare(strict_types=1);

namespace App\Http\Controllers;


final class HogeController
{

}

declare(strict_types=1); を先頭に入れて、 namespace を入れて、 class には final 修飾子を付けて、といった具合に Code Template に指定した内容に従って生成されます。

他にも使える値が Code Template の設定画面に書いてあるので、お好みの設定にすると捗る。

ご参考までに

ちなみに、僕は以下の設定を行っています。

PHP File

<?php
declare(strict_types=1);


PHP Class

<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end

final class ${NAME} {

}

PHP Interface

<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end
interface ${NAME} {

}

PHP Trait

<?php
declare(strict_types=1);
#if (${NAMESPACE})

namespace ${NAMESPACE};

#end
trait ${NAME} {

}

PHPUnit Test

<?php
declare(strict_types=1);

#if (${NAMESPACE})
namespace ${NAMESPACE};
#end

#if (${TESTED_NAME} && ${NAMESPACE} && !${TESTED_NAMESPACE})
use ${TESTED_NAME};
#elseif (${TESTED_NAME} && ${TESTED_NAMESPACE} && ${NAMESPACE} != ${TESTED_NAMESPACE})
use ${TESTED_NAMESPACE}\\${TESTED_NAME};
#end
use Tests\Unit\TestCase;

final class ${NAME} extends#if(${NAMESPACE}) TestCase #else PHPUnit_Framework_TestCase #end{

}

./tests/Unit/TestCase.php を用意して、 Unit Test に必要そうな便利メソッドをここに書いてるので、 use Tests\Unit\TestCase; して、 extends TestCase となるように書いてます。

デフォルトの laravel Project 状態なら use Tests\TestCase; で良いんじゃないかな。

おまけ

cmd + n で表示させて状態で、おもむろに "php" とか入力するとインクリメンタルサーチになって便利ですよ。