2008-08-21 13 views
68

PHPコードのリファクタリング(変数の名前の変更、メソッドの抽出、メソッド参照の検索など)を行うツールはありますか?ありがとうございました。PHPコードリファクタリングのツール

+3

動的言語で信頼できるリファクタリングを行うのは本当に難しいと思います... –

+2

はい、実際の問題は、ここでは良いインフラストラクチャ(解析、静的解析、変換)を使用していないことが疑わしいツールを構築する。基礎が堅固になるまでは、家を建てようとすることはほとんどありません。 –

+0

基盤がより強くなっています。 http://stackoverflow.com/a/21400723/120163 –

答えて

0

EclipseのPDTは、基本的なリファクタリング(私が知っている)をサポートしています。クラスの名前を変更して参照時に自動的に名前を変更できるようになりました。ファイルを移動したり、インクルード/参照の参照を変更したりすることもできます。

+0

私がこれを書いた時点では、 PDTの真実 –

+0

いいえ、現在のところありません。これはPDTの主な弱点です:(しかし、いくつかの次のリリースではそれが実現します。 – gaRex

3

私がまだリファクタリングのコンセプトに慣れているからといってもいいかもしれませんが、ツールを持っていれば私のためにやってくれるのは嫌です。

ほとんどのリファクタリングは手動で行うほうが、私は遅くなり、実際に私が動き回っている理由と理由を考える必要があります。

+3

リファクタリングは遅くならないはずです。リファクタリングは開発の迅速かつ確実なステップである必要があります。 –

+0

私はマークに同意します - 私はリファクタリングの主なセールスポイントを得ていません: "これは、コードをどのプログラマが受け入れ可能で、他の人にとって私のコードをリファクタリングすれば、それは私が従うのが容易ではないかもしれないので、どういう意味ですか? – Stann

+0

私はそれに同意しませんリファクタリングは "コードをどのプログラマが受け入れ可能で理解できる形式にする"ことを意味します。最も簡単な例はメソッドの名前を変更することです。メソッド名が悪い場合は簡単に改善できます。変更は誰にも影響しません。明らかに、あなたが他のものを使うためのjarを提供しているなら、パブリックメソッドの名前を変更しないでください。新しいメソッドを作成し、古いメソッドを非推奨にします。しかし、その場合、内部コードがより良い名前付き関数を呼び出すように、依然としてリファクタリングすることができます。 –

5

NetBeans IDEにはリファクタリング機能がありますが、必ずしも機能するとは限りません。私はしかし、初期のPHPアクセスで6.1を使用しています。私は6.5がPHPでより良いリファクタリング機能を持つことを期待しています。

+0

私はNetbeans 6.5を使用していますが、メソッドの名前を変更するなどの作業はできますが、同じプロジェクト内のファイルであっても、他のファイルの参照は修正されません。 – cletus

+0

私はNetbeans 6.7を使用しています。それはちょっと... –

+0

私は6.9.1を使用していますが、リファクタリング機能はまだPHPの場合は文字列の検索/置換に限定されています。動的言語の場合、リファクタリング機能は常に制限されます。クラス名を右クリックして、すべてのコンテキストで名前を変更するなどの操作はできません。 – rjha94

1

Netbeans 6.5ではPHPのリファクタリングのサポートはありませんが、将来のバージョンではそのようになります。

PDT eclipseプラグインもリファクタリングをサポートしていません。

Aptanaはリファクタリングもサポートしていません。私はどちらかといえば定義を得ることができませんでした。

私は最終的に検索を使用して置換します。私も少なくとも機能サポートの名前を変更したいと思います。

11

rephactorは、自動リファクタリングツールです。まだ少し不完全ですが、いくつかの基本的なリファクタリングがあります。

これ以外の場合は、リファクタリングのための最良のツールです。

+14

これは正規表現を使用してコードを検索します。それは単に安全ではありません。 –

+5

自動リファクタリングは決してありません。操作を確認する前と後のテストが必要です。 Rephactorは実際に前後のテストフローを統合します。 – troelskn

+6

@troelskn:決して?なぜあなたのプログラムに損害を与えるような方法でリファクタリングツールを実装する必要がありますか?つまり、本当に悪いリファクタリングツールがあることを意味します。ほとんどのリファクタリングを正しく行うことは技術的に簡単です*。それは多くの工学的な汗であり、ほとんどの人はそれを支払うことを望まないので、そこにあるものは一般にかなり悪いのです。しかし、それはリファクタリングツール*が壊れていることを意味しません。 –

2

まだ、私の好きなリファクタリングツールは、の超高速ファイル検索と組み合わせて、よく「ol」EditPlusです。 (ヒント:Alt + F7)いつどこで置き換えられるかを完全に制御したいというMark Biekの返答に私は完全に同意します。

リファクタリングを行う必要があるときはいつでも、私は組み込み関数を使って検索するか、または単にそれらを選択して変更したいファイルの総コマンダーでリストを作成し、それらをすべてEditPlusにドラッグします

Editplusは&はすべて、通常のテキストマッチング、正規表現のマッチングや、複数行マッチングを使用してファイルを開設し、現在のファイル、選択またはによって置き換える検索することができます。

また、コードリファクタリングに便利なのは、EditPlusのマクロレコーダー(Ctrl + Qでマクロの録音を開始する(1-9)、Alt + 1-9でマクロを再生する)です。

コードの削除、コピー、貼り付け、そしてそのキーボードを使用して、変数、ctrl + shift +(home || end ||矢印キー)を検索することができます。たとえば、CSVファイルを30秒以内に一連のSQLクエリに変換することができます。

+11

これはリファクタリングではありません。そのちょうど編集。 –

+2

リファクタリングは自動編集です。 – quodlibetor

+6

@quotlibetor:ベートーヴェンの五番目を書くことはあなたの定義によってちょうど編集しています。リファクタリング(意味的に合法的な方法で明確に定義されたコードチャンクを動かす)の違いは、2つの用語の区別が消去できないという意味が分からない任意のチャンクを動かすこととは質的に異なります。 –

0

私が知る限り、PHPのリファクタリングをサポートしている唯一のIDEは、PHPとEclipse PHPプラグインのメーカーのZend Studioです。機能は非常に基本的ですが。私が知っているものは、Resharper for C#のような製品の特徴を持っていません。

1

私は、2009年初めに予定されているリリースコードネームクロコダイルで、IDE Delphi for PHPがリファクタリング機能を備えていることを読んでいます。詳細はthis linkを参照してください。

+0

http://blogs.embarcadero.com/joseleon/2010/06/09/delphi-for-php-next-release-early-preview-15-refactoring/ –

3

私は個人的に好むPHPEclipse IDEを私の主要な開発ツールとして使用します。しかし、私は本当に基本的な "プロジェクトのどこに置き換えても"リファクタリングをしていません。

find . -type f -name "*Controller.php" -print0 \ 
     | xargs -0 sed -i 's/string1/string2/g' 

だから、インテリジェントあなたが参照を見つけることができ、これを使用して、名前の変更、削除、およびソースコードと操作の任意の並べ替えを行います。

しかし、非常に単純なは/ コマンドは簡単に解決することができsedを見つけます。

ところで、このパラメータと属性をすべて覚えていない場合もあります。一度入力してからreverse-i-searchに電話してください。

これが役に立ちます。

+2

sedコマンドに注意してください。あなたが変数をリファクタリングするときあなたはしばしば、特定のコンテストで、例えば特定の機能のように、リファラントを限定したいと思っています。変数$ dataはクラス内で多くの時間を持つことができますが、関数_dataRead()でのみその名前を変更することができます。これを行う機能は、単純なsedコマンドとIDEプラグインの違いを設定します。 –

13

Scisrは、PHPのためのシンプルな、スタンドアロンのリファクタリングツールです.....ビットをリファクタリングすることができます。

これは古い質問ですが、それはPHPリファクタリングツールの最高の試練の1つなので、新しいプロジェクトをリストに追加すると思いました。

多くの私の設計目標は、ここで言及されている他の項目の不十分さから生まれました - 特定のIDEに縛られているか、テストの実践を指示しようとするか、私はScisrの全体的なより良い経験を作りたいと思っています。インストールと実行は簡単です。それは巧みにしようとしますが、でもは巧妙ではありません。それは、私が自動化に最も役立つことがわかったタスクを実行します。楽しい!

+0

私はあなたのプロジェクトのホームページを読んだだけです。私はプロジェクトの背後にある方法に完全に同意し、それがうまくいくことを願っています。 (私はPC上で開発していますので、残念ながら私はUbuntuに移行するまで待たなければなりません) –

+0

嬉しいです!ハッキングを少しやるように感じたら、Windows環境で動かすのは難しいことではありません。私の推測では、ファイルパスは唯一の本当の問題であり、その多くはCodeSnifferのコードで処理されています.CodeSnifferはWindowsをサポートしていると信じています。 –

+0

リンクが壊れています - これはそうです:https://github.com/iangreenleaf/Scisr –

1

IntelliJからWeb IDEを試す。今はEAP段階(アルファ/ベータ版)ですが、数ヶ月間、唯一のIDEとして使用していますので、安定していてとても良いです。

+0

私もPHPStormを使用しています。名前の変更/移動、変数の導入、定数の導入、定数、インライン、安全な削除を導入する、非常に基本的なリファクタリングのサポートがあります。 –

8

PHPStorm、名前の変更リファクタリングは、ファイル、関数、定数、クラス、プロパティ、メソッド、パラメータ、およびローカル変数とグローバル変数のために働く http://www.jetbrains.com/phpstorm/index.html

。 また、以下のリファクタリングが用意されています

  • 変数を導入
  • 定数を導入するフィールド
  • インライン変数

を紹介し、彼らは同様にソースプロジェクトを開くにはいくつかの無料ライセンスを提供します!

+2

実際、このIDEはリファクタリングをサポートしています。残念ながら、いくつかのユーザビリティの問題があります。私は彼らがすぐに修正されることを望んでいます。たとえば、選択範囲内で検索/置換を実行すると、エディタウィンドウが「すべて置換」にジャンプします。一般的に私はそれが好きで、それを使用していますが、Aptanaを名前を変更することをサポートすれば心拍で選択します。それの中に – jeromeyers

+0

が素晴らしいですが、使いやすさはeclipse/netbeansと比べて本当に嫌です。たとえば、検索/置換やチームツールなどの基本的な機能。 – gaRex

4

https://github.com/QafooLabs/php-refactoring-browser

PHPのリファクタリングブラウザはthe good bookで説明リファクタリングブラウザ上より最近のテイクです。それはいくつかの助けを使うことができます(貢献してください)が、それはいくつかの共通のリファクタリングをサポートしています。書き込みのよう

は、ブラウザがサポートしています。

  • 抽出方法を
  • は(ローカル変数
  • は、インスタンスに変数
  • 名前の変更クラスと名前空間
  • 最適化使用書ローカル変換の名前を変更しますPHP固有)

実際に動作するSublimeTextプラグインがあります。私が新しいコードを見ているとき、私はコードベースを扱うためにこれらの単純なリファクタリングのいくつかを適用します。

関連する問題