使用php類圖繪製工具——phuml構建項目的類圖
昨天偶爾在網上尋找製作UML類圖的工具,本來打算自己親自動手為statusnet項目畫個類圖出來(也許我太低估這個工作量了),於是下了一個windows版本的VP_suite 4.2,試用了一下手感相當好,介面也很不錯的。而後我覺得應該有能把php源碼作成類圖的東東,上網搜了一下果然找到了——phUML (今天的主角)!過程中還找到一個phpDocumentor工具,能將代碼變成很好的文檔說明(以後再向大家介紹)。因為昨天要下班了,處長值班,我也不好意思很晚走,於是就沒一氣呵成來研究,於是乎拖到今天。經過一天的反覆嘗試終於ok!
首先,你要下載phUML必須有一個SVN用戶端,這個開源項目是在SVN上維護的。你可以先檢查下你的linux有沒有安裝SVN用戶端:以下是我的fedora12的輸出
[root@xiaofei ~]# svn --version
svn,版本 1.6.5 (r38866)
編譯於 Sep 19 2009,11:02:40
著作權 (C) 2000-2009 CollabNet。
Subversion 是開放原始碼軟體,請參閱 http://subversion.tigris.org/ 網站。
此產品包含由 CollabNet(http://www.Collab.Net/) 開發的軟體。
可使用以下的版本庫訪問模組:
* ra_neon : 通過 WebDAV 協議使用 neon 訪問版本庫的模組。
- 處理“http”方案
- 處理“https”方案
* ra_svn : 使用 svn 網路通訊協定訪問版本庫的模組。 - 使用 Cyrus SASL 認證
- 處理“svn”方案
* ra_local : 訪問本地磁碟的版本庫模組。
- 處理“file”方案
我的已經安裝了SVN,如果沒安裝的話用yum install svn應該可以搞定。然後下載phUML項目:
[root@xiaofei ~]# svn checkout svn://svn.pureenergy.cc/phuml
A phuml/src
A phuml/src/app
A phuml/src/app/phuml
A phuml/src/exceptions
A phuml/src/exceptions/processor
A phuml/src/exceptions/processor/notFound.php
A phuml/src/exceptions/processor/graphviz
A phuml/src/exceptions/processor/graphviz/style
A phuml/src/exceptions/processor/graphviz/style/notFound.php
A phuml/src/exceptions/processor/externalExecution.php
A phuml/src/exceptions/processor/option.php
A phuml/src/exceptions/phuml
A phuml/src/exceptions/phuml/invalidProcessorChain.php
A phuml/src/exceptions/phuml/invalidProcessor.php
A phuml/src/exceptions/generator
A phuml/src/exceptions/generator/notFound.php
A phuml/src/exceptions/base
A phuml/src/exceptions/base/property.php
A phuml/src/interfaces
A phuml/src/interfaces/processor
A phuml/src/interfaces/processor/externalCommand.php
A phuml/src/interfaces/processor/graphviz
A phuml/src/interfaces/processor/graphviz/style.php
A phuml/src/interfaces/processor.php
A phuml/src/interfaces/generator.php
A phuml/src/config
A phuml/src/config/config.php
A phuml/src/scripts
A phuml/src/scripts/checkAll.sh
A phuml/src/autoload
A phuml/src/autoload/phuml_autoload.php
A phuml/src/autoload/php_autoload.php
A phuml/src/autoload/base_autoload.php
A phuml/src/autoload/processor_autoload.php
A phuml/src/autoload/structure_autoload.php
A phuml/src/classes
A phuml/src/classes/processor
A phuml/src/classes/processor/graphviz.php
A phuml/src/classes/processor/statistics.php
A phuml/src/classes/processor/options.php
A phuml/src/classes/processor/graphviz
A phuml/src/classes/processor/graphviz/style
A phuml/src/classes/processor/graphviz/style/default.php
A phuml/src/classes/processor/graphviz/options.php
A phuml/src/classes/processor/dot.php
A phuml/src/classes/processor/neato.php
A phuml/src/classes/base.php
A phuml/src/classes/generator
A phuml/src/classes/generator/tokenparser.php
A phuml/src/classes/php
A phuml/src/classes/php/interface.php
A phuml/src/classes/php/attribute.php
A phuml/src/classes/php/class.php
A phuml/src/classes/php/function.php
A phuml/src/classes/php/functionParameter.php
A phuml/src/classes/phuml.php
取出版本 69。
我當前的使用者是root,所以我下載的項目已經儲存到/root/phuml的目錄中。
之後我好像不知道應該如何去運行這個項目代碼,怎麼安裝他呢,這讓我十分頭疼。我甚至想這個項目的開發人 Jakob Westhoff 寫了封email求助。我是個php菜鳥,不太清除命令列php這回事,費了很大週摺。後來在網上找資料幾乎沒有關於phUML使用方法的。後來我嘗試著用命令列的php去運行phuml這個檔案,結果正確>_<
你可以用如下命令得到你php命令列的所在位置,一般都是/usr/bin/php這個命令
[root@xiaofei bin]# which php
/usr/bin/php
接下來你可以嘗試用命令列運行以phuml
[root@xiaofei app]# php /root/phuml/src/app/phuml -h
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
phUML Version 0.2 (Jakob Westhoff <jakob@php.net>)
Usage: phuml [-h|-l] [OPTIONS] <DIRECTORY> <PROCESSOR> [PROCESSOR OPTIONS] ... <OUTFILE>
Commands:
-h Display this help text
-l List all available processors
Options:
-r Scan given directorie recursively
Example:
phuml -r ./ -graphviz -createAssociations false -neato out.png
This example will scan the current directory recursively for php files.
Send them to the "dot" processor which will process them with the option
"createAssociations" set to false. After that it will be send to the neato
processor and saved to the file out.png
看到這個你應該很興奮了吧,確實離成功只有一步之遙了。上面的協助資訊相信能給你很大的協助!!
那就用這個命令實驗一把吧:(注意cd到phpmul那個執行檔案的目錄,即/root/phuml/src/app,下同 )
[root@xiaofei app]# php phuml -r ./ -graphviz -createAssociations false -Neato out.png
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
phUML Version 0.2 (Jakob Westhoff <jakob@php.net>)
[|] Running... (This may take some time)
[|] Parsing class structure
[|] Running 'Graphviz' processor
[|] Running 'Neato' processor
sh: neato: command not found
A fatal error occured during the process:
Execution of external program failed:
Array
不好,有錯誤了,這是怎麼回事?難道我沒有安裝neato嗎?檢測下:
[root@xiaofei app]# php phuml -l
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
phUML Version 0.2 (Jakob Westhoff <jakob@php.net>)
The following processors are available:
* Processor: Graphviz
- Options:
style (string):
Style to use for the dot creation
createAssociations (boolean):
Create connections between classes that include each other. (This
information can only be extracted if it is present in docblock comments)
* Processor: Neato
- Options:
This processor does not have any options.
* Processor: Dot
- Options:
This processor does not have any options.
* Processor: Statistics
- Options:
This processor does not have any options.
上面說The following processors are available:而且還有Neato這個這個子程式阿。在這裡我停滯了很長時間,後來我在經過很長時間的思索,我以為是Neato後面應該跟一個參數什麼的,看了有關Graphviz的很多說明文檔(phUML用的 Graphviz )來完成畫圖工作。突然我意識到可能沒有安裝 Graphviz啊!!!
於是進行安裝:
[root@xiaofei app]# yum install graphviz
已載入外掛程式:refresh-packagekit
adobe-linux-i386 | 951 B 00:00
updates/metalink | 6.8 kB 00:00
設定安裝進程
解決依賴關係
--> 執行事務檢查
---> 軟體包 graphviz.i686 0:2.20.3-5.fc12.1 將被 升級
--> 完成依賴關係計算
依賴關係解決
===============================================================================================
軟體包 架構 版本 倉庫 大小
===============================================================================================
正在安裝:
graphviz i686 2.20.3-5.fc12.1 fedora 766 k
事務概要
===============================================================================================
安裝 1 軟體包
更新 0 軟體包
總下載量:766 k
確定嗎?[y/N]:y
下載軟體包:
graphviz-2.20.3-5.fc12.1.i686.rpm | 766 kB 00:01
運行 rpm_check_debug
執行事務測試
完成事務測試
事務測試成功
執行事務
正在安裝 : graphviz-2.20.3-5.fc12.1.i686 1/1
已安裝:
graphviz.i686 0:2.20.3-5.fc12.1
完畢!
這下再運行
[root@xiaofei app]# php phuml -r ./ -graphviz -createAssociations false -Neato out.png
就已經可以正常工作了。
你如果想對某些PHP檔案畫類圖,就把上面的./換成你的PHP程式所在的位置就行了。
我開始畫statusnet的類圖,結果出現了一個錯誤
[root@xiaofei app]# php phuml -r /var/www/html/blog/ -graphviz -createAssociations false -Neato out.png
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
phUML Version 0.2 (Jakob Westhoff <jakob@php.net>)
[|] Running... (This may take some time)
[|] Parsing class structure
[|] Running 'Graphviz' processor
[|] Running 'Neato' processor
neato: failure to create cairo surface: out of memory
A fatal error occured during the process:
Execution of external program failed:
Array
記憶體流失?估計是statusnet中的類是在太多了,phml已經超載了。沒辦法只能一個目錄一個目錄的進行畫類圖,圖實在太大了傳不到部落格上來,大家就自己畫出來看吧!
yuchao@yuchao-MS-7597:~/source/phuml/src/app$ php phuml -r /home/yuchao/source/latest/piwik -graphviz -createAssociations false -Neato out.png
phUML Version 0.2 (Jakob Westhoff <jakob@php.net>)
[|] Running... (This may take some time)
[|] Parsing class structure
[|] Running 'Graphviz' processor
[|] Running 'Neato' processor
[|] Writing generated data to disk