我们购买了一个很棒的PHP脚本,并改变了很多代码和功能。现在我们要清除一些代码,从删除未使用的函数/方法开始。
我们正在考虑使用debug_backtrace()
向每个方法添加几行代码,以登录文件或数据库,类名/方法的名称+从中调用。
由于应用程序非常大,我想知道在进入并开始编辑数百个函数之前是否有更好的方法。有什么建议吗?
答案 0 :(得分:2)
xdebug's代码覆盖率工具允许您测试实际执行的代码行,而无需在所有函数/方法中放置跟踪语句。
没有php.ini设置可以控制代码覆盖率统计信息的创建。 PHP函数在运行时打开和关闭统计信息的收集,允许对哪些代码段创建覆盖统计信息进行细粒度控制。
要开始收集代码覆盖率统计信息,请使用xdebug_start_code_coverage()
。
要停止收集统计信息,请使用xdebug_stop_code_coverage()
。
xdebug
在脚本执行时将收集的统计信息保存在内存中,所以你
可以根据需要随时打开和关闭脚本中的代码覆盖率。检索
将统计信息收集为数组,使用xdebug_get_code_coverage()
。
你在如何实现它方面有很多自由,但听起来你有一个大的脚本,在这种情况下只需从顶部开始,停止所有出口点,然后在实际出现之前打印出覆盖范围退出。
Zend Developer Zone对此类内容有一个很好的介绍,它以Part One: Introducing xdebug开头。
如果您更喜欢进行静态分析,OWASP男孩会在Source Code Analysis Tools页面上保留一份好的工具列表以及每个工具的优缺点,这些工具详细介绍了开源或免费以及商业工具。
我建议查看一些,例如PHP Mess Detector(PHPMD)它与PDepend非常相似,并提供有关错误,未使用代码和过于复杂功能的报告。它对于识别可能使用某些重构的点非常有用。
可以从命令行调用PHPMD,如下所示:
phpmd {directory} {report format} {rules}
$ phpmd . text codesize,unusedcode
/src/xxxxxx/api/src/base/Model.php:75 The method __toArray() has a Cyclomatic Complexity of 12. The configured cyclomatic complexity threshold is 10.
/src/xxxxxx/api/src/controller/Users.php:235 Avoid unused parameters such as '$request'.
/src/xxxxxx/api/src/controller/Users.php:246 Avoid unused local variables such as '$x'.
/src/xxxxxx/api/src/controller/Users.php:246 Avoid unused local variables such as '$undeclared'.
/src/xxxxxx/api/src/base/Controller.php - Unexpected token: [, line: 88, col: 56, file: /src/xxxxxx/api/src/base/Controller.php.
PHP CodeSniffer可能是目前最好的工具;设置非常简单,默认标准很容易扩展或替换为您自己的标准。因此,对于由超过几个人组成的团队来说,这是一个明智的选择。它还附带PSR-1和PSR-2标准,因此维护一个开源的,PSR兼容的项目只需要针对您的项目安装和运行它(当然,遵循它的建议)。它还具有标记JavaScript和CSS的能力。
可以通过命令行轻松调用PHPCS:
phpcs --standard={comma-separated rulesets} {directory}
使用PHPCS的输出,在任何项目中维护样式指南都是微不足道的。来自同一项目的示例输出:
$ phpcs --standard=PSR1,PSR2 .
FILE: /src/xxxx/api/src/exception/Xxx.php
--------------------------------------------------------------------------------
FOUND 1 ERROR(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
15 | ERROR | The closing brace for the class must go on the next line after | | the body
--------------------------------------------------------------------------------
Time: 0 seconds, Memory: 5.25Mb
Google可以为您提供更多选项,而不是我们在此讨论的空间。希望这能让你找到正确的项目路径。