首页 > CMS > PhpCMS > 正文

PHPCMS代码分析的一些想法

2024-09-10 07:15:31
字体:
来源:转载
供稿:网友

最近准备分析PHPCMS的整站代码,下面这段话,写的不错,看了,受益匪浅,现在收藏下.

1. PHP语言没有学好就不要去分析PHPCMS的代码

我不太认可这种观点,因为掌握PHP语言是进行代码分析的必要条件但不是充分条件,是不是PHP语言学好了我们就可以很好的分析代码呢?回答是否定的,代码分析不但需要掌握PHP语法,还需要有代码分析和阅读的技巧,如果没有代码分析和阅读的技巧,光有PHP语法知识,分析工作一定很难做下去,至于代码分析的技巧是什么,我会在下面谈到,反过来,如果具有代码分析的技巧,我们PHP语法也不需要学得很精通,当然学得好总是有好处的,没有副作用的.Vevb.com

这个结论的得出其实不难理解。PHP是计算机的语言,汉语和英语是人的语言,试想想,我们几个人敢说我们的汉语很精通,中国的汉字至少有6万多个,我们日常用的也就是常用的3000个和次常用的3000个,我们有很多字都不认识,有很多成语都不知道什么意思。但是我们阅读和理解都不成问题,因为我们一直在用,我们看到不懂的字词时,我们都会连猜带蒙,这就是技巧,也适用于读程序和读英语文章.

再看看英语,国家培养的大学生通过了英语四级、六级考试,词汇量都在五六千左右,可是英语还是说不出口,英文文章还是写不出来,甚至看不懂,为什么呢?我们用的太少了。因此,计算机语言的学习,掌握基本语法后,我们应该更多的去写程序,去读程序,在用的过程中再学习和提高,否则,结果只能和英语一样,写不出程序也读不懂程序,再说了,PHP语言学得好,就是所有的语法都掌握,所有的函数都掌握码?那谁也做不到,做到了也没有用,否则要字典、要参考手册做什么?因此,只要学会了PHP的基本语法,就应该立刻去分析代码了,边用边学,否则,永远只能纸上谈兵。

2. 如何做代码分析,也就是上面提到的代码分析技巧

代码分析一定要把握程序的主干和全局,我们第一眼看到PHPCMS的代码时,都会头大,因为这时我们看到了无数的叶子,我们要做的是从繁杂的叶子中理出枝条、主干和根本,只有掌握了枝条、主干和根本,才能把繁杂的叶子穿起来,否则,我们只能陷入细节的泥沼中难以自拔,甚至是一叶障目,只见树木不见森林,对系统缺乏宏观的把握.

技巧一:要有把握全局的眼光和意识

PHPCMS本质上说是一个MIS系统,所有网页上的操作80%(我的估计不一定准确)应该是对数据库中相应表的添加、删除和修改操作。因此,对于这80%的数据库操作相关的功能模块,我们可以用同样的一个主线去分析。这个主线就是:页面操作(包括:数据编辑和提交)->调用相应的代码文件->相应的支撑函数->数据库访问。

技巧二:数据访问功能的主线,所以我们一定要从功能使用上入手,而不是从代码文件出发,如果分析咨询模块,就用IE打开咨询的页面,从IE的地址栏观察到调用的PHP文件名,然后我们再找到这个代码文件去分析,这样才有针对性,而且我们在读代码的时候可以和界面上的操作关联起来,这样非常有利于我们理解代码.

分析代码的时候只要用一个语句就可以搞定了。在代码文件的头部写上ECHO语句,用来确认我们要分析的代码文件确实被调用,如果这个代码文件没有被调用,我们就不要分析,因为我们就想知道界面上的功能是如何用代码实现的,我们就去找相应的代码文件。

IF和ELSE块中写上ECHO语句,用来判断是IF分支被执行还是ELSE分支被执行,我们只分析被执行的分支,不执行的分支先略去。这就是找主干的技巧,我们要快速的从很多的代码中找出哪些要看,哪些不要看(不执行的就不去看),不能眉毛胡子一把抓,而是要快速的切入主题。当然如果想要知道变量的值,还要用ECHO打印出来。直到最后找到数据库操作的SQL语句。

技巧三:在代码文件的任何位置用ECHO语句打印调试信息,这个主线就分析完了,我们把函数或者代码文件的调用关系记录下来就是详细设计文档,然后再花时间去分析细枝末节的东西.

3. PHPCMS代码分析就是给代码加注释

经过上面的分析,我们有些人可能已经掌握了代码分析技巧,有些人可能没有,然后大家上来可能就开始给代码加注释了,认为这就是代码分析。这样做我也不是很认可,我认为首先要做的是画出函数或者代码文件之间的调用关系图。有了关系图之后,再给代码加注释。我们现在做的工作是反向工程,对我们最有价值的是概要设计文档和详细设计文档。概要设计文档(如图)

比如:咨询功能有index.php调用post.php, list.php, show.php以及reply.php。详细设计文档(如图)

比如:post.php对其他函数或代码文件如何调用,最后需要的概要设计文档和详细设计文档的具体内容和格式可能比这个要更规范和详细,我这里只是为了说明问题,希望能起到抛砖引玉的作用.

这样做的好处是我们看了post的详细设计文档就一目了然,知道调用了哪些全局函数(蓝色),知道调用了哪些类的方法(红色)。

以后如果我们写类似的功能或者修改完善某个功能时,就可以参考这幅图来做了,至于代码中的注释倒是其次的事情了,如果我们把每一行代码都注释上,本身没有必要,而且也不科学,因为PHPCMS代码本身的变量名、函数名都是有意义的英文单词,代码本身就是很好的注释,如果加上很多注释其实多此一举,反而增加了今后阅读代码人的阅读工作量,另外也不利于代码的维护,改了代码之后还要改注释.

当然对于某些关键算法或者比较复杂的算法另当别论。

技巧四:代码分析先绘制设计文档,再添加注释,还是先把握主干,再深入细节.

代码文件名的命名

php文件命名有规律可循,有的php文件里面定义了多个函数,这样的文件名称可能是*.func.php,一般放着全局函数或者公共函数,有的里面定义了类,这样的文件名称可能是*.class.php,有的一个文件里面即没有函数的定义,也没有类的定义,这样的文件就是就相当一个函数,完成特定的功能,一般文件名就是功能的描述,这样的文件名称可能是*.php,比如:post.php, list.php,index.php,等等,有的可能是包含(include,简写为inc)文件,里面定义了若干变量或声明其他包含关系,这样的文件名称可能是*.inc.php.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表