そして、最も単純なクラスの1つでメソッドとフィールドがどのように相互接続されているかを確認したかったのです。 PhpCallGraphは 、すぐにグーグルで修正できませんでした(xdebugの問題)。さらに、例から判断すると、プロジェクト全体の接続を表示し、トレースして、1つのクラスを調べる必要がありました。
私は独自のソリューションを作成することにしました。これが何が起こったかです。
実験用のコードをダウンロードするには、 GraphVizが必要です。
使い方はとても簡単です。
まず、ドラフトマンクラス自体を分析しましょう。
require "Class2GV.php"; $c2g = new Class2GV("C:\\Program Files\\GraphViz 2.28\\bin"); //, $c2g->showVariables(true); //- , $svg = $c2g->convert("Class2GV.php", "dot"); // dot, header("Content-type: image/svg+xml"); readfile($svg);
緑の長方形はパブリックメソッド、黄色の菱形は保護されています(ここにはありません)、赤い楕円はプライベート、青い長方形は説明されていません(継承または動的に呼び出され、ここにもありません)。 灰色の長方形は変数です。
変数の使用は、常に1つの矢印、メソッド呼び出し(その数に応じて)で表示されます。
かなり論理的なクラス構造ですが、かなり複雑です。 ちなみに、ドットを使用する場合(階層的にグラフを描画しようとする場合)、より多くの「正しい」クラスが適切に見えます。
しかし、よく見ると、右側に(組み込みの
get_all_tokens()
関数を使用して)PHPファイルの解析に関連するかなり関連した領域があり、別のクラスで選択できることが
get_all_tokens()
ます。 これは、変数のないグラフで特に顕著です。
私はあまり最適化しませんでしたが、クラスが成長し始めたら、それをしなければなりません。
クラスの例をいくつか示します。
- Kohana 3.0のMySQLモジュール(モジュール/データベース/クラス/ kohana /データベース/ mysql.php)、素晴らしいクラス。
- そして、ここに、シンプルなオールインワンORMであるIdiormがあります( neatoが描いた)。
- phpBB 3.0の一部のクラス(/functions_module.phpを含む)、描画されたsfdp、c、およびクラス変数なし。
私はとにかくphpBBの内部構造が好きではありませんでしたが、このクラスがあまりにも多くの責任を負い(「Clean Code」の第10章を参照)、何も隠さないことが明らかになりました。 これらは、およそ1つの領域に関連する、集められた単なる機能であることがわかります。
- そして、これはそれが作成されたクラスです: