手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:win7

使用PHP_UML生成代码的UML图

不得不说,我很郁闷。事实上,我很少使用PEAR库,几乎是从来也不,所以看到这篇 文章的时候,我尝试了一下,同时也安装了pear库。并按照教程所说的,一步步的做了下去。

OK,先上文章,再说郁闷。

在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题.
今天我就介绍一种, 自动生成UML图的方法.
假设, 我有一个项目文件夹:laruence, 在这个文件夹上有一个文件Root.php(事实上, 无论多级目录, 多个文件, 都可以).

PHP代码
  1. <?php  
  2.    
  3. abstract class Root {  
  4.     private $instance;  
  5.     abstract public function Hi();  
  6. }  
  7.    
  8. interface Intro {  
  9.     public function Say();  
  10. }  
  11.    
  12. class Sub extends Root implements Intro {  
  13.     private $instance;  
  14.     public function Say() {  
  15.         echo "I am Laruence";  
  16.     }  
  17.     public function Hi() {  
  18.         echo "Hello!";  
  19.     }  
  20. }  
  21. ?>  

 

首先, 我们要使用PHP_UML(PHP_UML)根据代码生成XMI.
使用方法比较简单, 在安装PHP_UML以后, 运行:

XML/HTML代码
  1. phpuml laruence/ -o laruence.xmi -n laruence -f xmi --pure-object --no-deployment-view --no-component-view --no-docblocks  

 

会得到一个laruence.xmi文件, phpuml的具体参数可以通过phpuml –help了解.
有了xmi以后, 如何转成UML图呢?
Visio2007不支持导入XMI, 我找到了另外的一个工具:Altova MapForce, 这个工具可以支持XMI到UML图的转换, 需要注册, 不过提供了30天的使用许可(大家要是有更好的替换方案, 欢迎补充).
在Mapforce导入laruence.xmi以后 ,生成UML图, 就得到了如下的PNG:

大小: 14.05 K
尺寸: 473 x 376
浏览: 1602 次
点击打开新窗口浏览全图

是不是很方便呢?
另外PHP_UML还可以生成html格式, 做为一种doc gen工具也不错. 更可以通过xmi生成PHP文件.

--EOF--上文来自http://www.laruence.com/2010/05/14/1473.html【风雪之隅】

郁闷的事情是这样发生的,我直接进行我的命令行,OK,进入php目录,直接运行pear.bat,因为目录下有这个文件。但是告诉我不对,所以我准备重装pear,怎么装呢?官方告诉我,下载一个go-pear.php文件,用PHP执行一下就可以了。
下载好go-pear.php文件后,拷到php目录下,运行:php go-pear.php,然后就一步一步的往下安装PEAR了。装的时候请选择system而不是local。安装完毕后生成一个REG文件,这是让你执行一下,把PHP的环境变量加到系统中。

这时候,就可以运行pear install PHP_UML-1.5.2了,第一件郁闷的事情就发生了,系统提示,php_uml需要xsl的支持,因为我用的是绿色版的,所以我修改了一下我的php.ini后,继续执行时,仍然提示需要xsl,不是特别明白的时候,我看了一下我的php.ini,确认是加载了。但再次运行又是提示,最后我运行php --ini,才发现,原来命令行下用的php.ini居然是在c:\windows下面,而不是我绿色版中配置的php.ini文件。我把php.ini拷贝到c:\windows下后,程序可以顺利执行,安装完毕php_uml了。

第二件郁闷的事情接踵而至,按照上文的程序方式,我生成了xmi文件,却发现无法打开,怎么办?按照 文件提示下载了那个Altova MapForce【我还是翻墙下载的呢,这么辛苦都没有搞定,真郁闷,40多M啊】,结果还是无法打开xmi文件,悲剧就是这样产生的。反正我是白搞了这玩意了。因为我平时不用UML,所以也不知道如何打开xmi文件。郁闷,直到现在。。。

Tags: pear, phpuml, uml, xmi

PHP里simplexml_load_string函数一个容易犯晕的地方

以下内容均来自老王。说实话,simplexml的这些问题我以前遇到过,而且还是非常强烈的遇到了。
那时候是08年的事了,项目中与SOAP在交互,返回的都是XML,所以就直接采用了simplexml_load_string了。这时候就会遇到这种问题,比如我拉一个列表,但会有三种情况:1、没数据,2、1条数据,3、正常数据
1、没数据的时候,返回一个空的simplexml Object,
2、一条数据的时候,返回的也是一个simplexml Object,结果集成了这个object的元素
3、数据列表,这时候返回的却是一个Array,每一个元素是simplexml Object,等同于2。
后来我是没办法,就多写了一个函数判断,如果是object,并且不为空,直接把object强制转为array,因为,如果是空的simplexml Object,强制转的话,还是Object,转不了。。。

当时还有一个可恨的事情,我以前可能介绍过,xml在返回的时候,他的形式可能是这样的<test-name>gouki</test-name>,在返回这样的形式时,生成object时,却是test_name,在没有print_r出来时,我死活搞不定。。。后来才发现这个问题,郁闷啊

好了,说了半天,该说说老王的内容了:
这个问题遇到好几次了,今天翻看以前代码的时候看到,便记下来,先用一段代码重现一下问题:

PHP代码
  1. <pre>  
  2. <?php  
  3. $string = <<<EOF  
  4. <data>  
  5. <foo><bar>hello</bar></foo>  
  6. <foo><bar>world</bar></foo>  
  7. </data>  
  8. EOF;  
  9.   
  10. $data = simplexml_load_string($string);  
  11.   
  12. print_r($data);  
  13. print_r($data->foo);  
  14. ?>  
  15. </pre>   

乍一看,结果很让人费解:

XML/HTML代码
  1. SimpleXMLElement Object  
  2. (  
  3.     [foo] => Array  
  4.         (  
  5.             [0] => SimpleXMLElement Object  
  6.                 (  
  7.                     [bar] => hello  
  8.                 )  
  9.             [1] => SimpleXMLElement Object  
  10.                 (  
  11.                     [bar] => world  
  12.                 )  
  13.         )  
  14. )  
  15. SimpleXMLElement Object  
  16. (  
  17.     [bar] => hello  
  18. )  

明明print_r显示foo是一个有两个bar元素的数组,但是最后却仅仅显示了一个bar元素!

原因其实很简单,在如上所示simplexml_load_string的结果里,foo并不是数组,而是一个迭代对象!

可以这样确认:

PHP代码
  1. foreach ($data->foo as $v) print_r($v);  
  2. foreach ($data->children() as $v) print_r($v);  
看来,print_r或者var_dump之类的表象并不完全可信,自己多留心吧。
原文来自:http://hi.baidu.com/thinkinginlamp/blog/item/9dbb15ce7a621632b700c86a.html

Tags: simplexml, 老王