はじめに
Eclipse といえば IDE なので当然メソッド名などの入力補完が可能です、改めて言うことでは無いですが。
@return
などの DocComment を書いておけば、それを元に候補を出してくれます。
<?php
class Hoge
{
public function get() {}
}
/**
* @return Hoge
*/
function func() {}
// 入力補完が効く
func()->get();
DocComment を書いていなくても文脈からある程度察してくれます。
<?php
function nodoc()
{
return new Hoge();
}
// DocComment がなくても入力補完が効く
nodoc()->get();
ところで最近知ったのですが、次のようにすればオブジェクトの配列でも入力補完させられます。これは便利!
<?php
/**
* @return Hoge[]
*/
function returnArray() {}
foreach ($a as $x)
{
// 入力補完が効く
$x->get();
}
もちろん、配列の場合でも文脈からある程度察してくれます。かしこい!
<?php
function nodocArray()
{
return array(new Hoge);
}
foreach (nodocArray() as $x)
{
// 入力補完が効く
$x->get();
}
ただ、DocComment や 文脈からでは入力補完させられない場合もあります。例えば次のような場合です。
<?php
$class = 'Hoge';
$o = new $class();
他にもリフレクションから newInstance
したり、DI や ServiceLocator を使ってると入力補完を効かせられないケースがてんこ盛りです。
そんなときはブロックコメントで @var
と変数名とクラス名を書いてやれば OK です。
<?php
$class = 'Hoge';
/* @var $o Hoge */
$o = new $class();
// 入力補完が効くようになった!
$o->get();
本題
Eclipse は色々と頑張って入力補完してくれるのですが、頑張りすぎなのか、もしくは私の書き方がなにかおかしいのか、たまに @var
しても入力補完が効かないことがあります。
そんなときに使う最後の手段がこれ。
<?php
$o instanceof Hoge;
$o->get();
instanceof
するとほぼ間違いなく入力補完を効かせることができます。
唐突に意味のない instanceof
が出てくるのはちょっと気持ち悪いですが・・・テストコードとかならいいよね!