2013年3月10日日曜日

Intellij IDEA で少しだけPHPを書くのが楽になるかもしれない方法

去年末の75%offの際に Intellij IDEA 買いました。

いやもう凄い便利です、PHP書くときに… (´;ω;`)

ってことで本当は年初にでも書けばよかったんですけど…
かなり今更感ありますが取り敢えず書いとこ〜ってことで書きました。

あと今月から個人的にはもうPHPほとんど書く予定はない! はず…

Intellij IDEA で少しだけPHPを書くのが楽になる方法

IDE使うならやっぱりバリバリに補完が効くほうが良いですよね?

ということでPHPをIDEAで書くときに補完がよく効くようになる方法

結論

コメントを書く

具体的に

class Hoge
{
    /**
     * @return Fuga
     */
    public function createFuga()
    {
        return new Fuga();
    }
}

class Fuga
{
    /**
     * @var Piyo
     */
    private $piyo;
    
    public function __construct()
    {
        $this->piyo = new Piyo();
    }
    
    /**
     * @return Piyo
     */
    public function getPiyo()
    {
        return $this->piyo;
    }
    
}

class Piyo
{
...

みたいに書くだけ

そうすると下記のような状況で補完が効いて幸せになれます

$hoge = new Hoge();

// ここは別に何もしなくてもHogeのメソッドは補完の一覧に出てくる
$fuga = $hoge->createFuga();

// Hoge::createFuga に@returnコメントがないと
// 下記のようなコードを書く際に補完が効かない(getPiyoが一覧に出てこない)
$piyo = $fuga->getPiyo();

@return / @var 重要

Unitテスト書くときに少し幸せ

class HogeTest extends PHPUnit_Framework_TestCase
{
    public function testHoge()
    {
        $mock = $this->createMock();
        ...
    }
    
    /**
     * @return Hoge|PHPUnit_Framework_MockObject_MockObject
     */
    public function createMock()
    {
        return $this->getMock("Hoge", ...
    }
}

まあなんか上記の例は @depends を使ったほうが良いケースの場合もあると思うので書き方は臨機応変に…

1メソッドの中で、Mock作っちゃうとPHPUnit_Framework_MockObject_MockObjectとしてしか認識しないので、 当然Mock元のインスタンスメソッドとかは補完の対象として出てこないです。

上のようにあえて分離しといて@returnの内容を「|」で繋ぐと少し幸せになります

問題点

  • arrayとかの場合は全く幸せにならない
  • 幸せになるのはIntellij とか PHPStomeとかでPHP書く人だけっぽい
  • てか微妙に苦労するくらいなら端から別の言語で…

まさか「IDEAで楽したいから@return書け、絶対!」とか言えませんよね?

ってことでチーム内で強要(?)する場合は

  • PHPCS/MD に怒られないように丁寧にコード書こうね!
  • コメントはちゃんとココらへん見て書こうね!

とかすればいいんじゃないでしょうか。

まあゴミのような引き継ぎ案件でそれを途中から入れるのは無理だろうけど

なので新規なのにPHPを書かなければならない可哀想な方々、 導入時に静的解析ツールを入れましょう

まあ新規案件でPHPを選ぶとかあるのか…?






0 件のコメント:

コメントを投稿