2012-04-09 8 views
2

私は複雑なオブジェクト階層を持つ既存のPHPプロジェクトに取り組んでいます。 Netbeansはオートコンプリート機能(これは完璧ではありませんが、多くの場合、十分正確です)のおかげで大きな助けになりました。それらの属性、関係などをすべて覚えていることはほとんど不可能です。 最近、私はvimで遊んでいて、ネットビッチを投げ捨てることを考えていました。私は現在、このスクリプトを使用してい :私は欠けているhttp://www.vim.org/scripts/script.php?script_id=3171VIM php omnicomplete - マルチレベルのオブジェクト階層

ことの一つは、例えば、オブジェクトの複数のレベルのためのオートコンプリートです:

b.php
<?php 
class A { 

    /** 
    * @var B 
    **/ 
    public $b; 

} 

a.php

<?php 
class B { 

    /** 
    * @var C 
    **/ 
    public $c; 

} 

c.php

<?php 
class C { 

    /** 
    * @var D 
    **/ 
    public $d; 

} 

ので、それだけで...最初のレベルのために働くことが何とか可能である

$a = new A(); 
$a-> //omni complete here works fine, it lists "b" 
$a->b-> //displays 'b' again, instead of 'c' 

test.phpをはvimの中に、この機能を取得しますか?

そうでない場合、どのようにそのようなプロジェクトで自分の道を見つけるのですか?あなたはそれを任意のプロパティ/メソッドを与えるか、またはそれをB()のインスタンスを作っていなかったので、あなたはVimは任意の有用な完了を提案することを期待してはいけません

public $b; 

答えて

2

あなたのパブリックプロパティは空の変数に過ぎません$b->の場合で

a.php、

<?php 
class A { 
    public $b = new B(); 
} 

b.php、

<?php 
class B { 
    public $c = new C(); 
} 

c.php

<?php 
class C { 
    public $c; 
} 

test.phpを

<?php 
    $a = new A(); 
    $a-> // proposes b 
    $a->b-> //proposes b 

    $b = $a-> // proposes b 
    $b = $a->b; 
    $c = $b-> // proposes c 
    $c = $b->c; 
    $d = $c-> // proposes d 

そう... PHP補完プラグインは、おそらく少し限られている(驚き、Vimはテキストエディタではなく、IDEである)が、あなたが固執するならば、それが動作するように表示されますより一般的な(および可読の)コーディングスタイルに変換する。

再び、Vimはテキストエディタです。非常に強力なものですが、依然としてのテキストエディタです。肥大化したIDE がジョブのための適切なツールである状況がありますが、速度は遅くなりますが、Vimが好きです。

+0

これはPHPでは動作しません。クラスプロパティでオブジェクトを直接インスタンス化することはできません。ほとんどのPHP IDEで動作するので、phpdoc型のヒントを使用しました.ctagsを正しく解析するように設定できるかどうかはわかりません。 – Nevermind

+1

はい。私のコードは正しいPHPではありません。ひどく悪いしかし、それは実際には意図的なものでした.Vimはあなたのコードについて何も理解していないので、 'ctags'はPHPdocのヒントをサポートしていないため、VimでPHPdocヒントを使用する方法はわかりません。あなたが望むものを得るための唯一の方法は、ひどい違法なコードを書くことだと思われます。 – romainl

関連する問題