/ php

php-quality

如何衡量代码质量,以确定代码的一致性及良好结构,以及如何从它生成文档。

1. 使用静态分析工具测量质量

只有定期使用它们,并以理想的方式进行每一次 commit,静态分析工具才能真正显示出价值。

phploc - 代码行统计

https://packagist.org/packages/phploc/phploc

评估代码复杂度:

$ wget https://phar.phpunit.de/phploc.phar
$ chmod +x phploc.phar
$ sudo mv phploc.phar /usr/local/bin/phploc

然后安装完毕,你就可以使用 phploc 命令来检测你的代码复杂度了:

phploc ./

phpcpd - 复制粘贴统计

识别代码中的复制粘贴,即重复的地方。

https://packagist.org/packages/sebastian/phpcpd

$ wget https://phar.phpunit.de/phpcpd.phar
$ chmod +x phpcpd.phar
$ sudo mv phpcpd.phar /usr/local/bin/phpcpd
phploc ./

phpmd - 项目消息探测器

分析代码整洁度,例如:

  • 过长的方法名。
  • 过长的变量名。
  • 过短的变量名。

https://packagist.org/packages/phpmd/phpmd

wget -c http://static.phpmd.org/php/latest/phpmd.phar
chmod +x phpmd.phar
sudo mv phpmd.phar /usr/local/bin/phpmd 

检查下命名问题:

phpmd ./ text naming

2. 编码标准

phpcs - 标准探测器

php_codesniffer 代码探测器

https://packagist.org/packages/squizlabs/php_codesniffer

curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
chmod +x phpcs.phar
sudo mv phpcs.phar /usr/local/bin/phpcs
phpcs --standard=PEAR src/Email.php
phpcs --standard=PEAR --report=summary *

查看已经安装的标准:

phpcs -i

The installed coding standards are MySource, PEAR, PSR1, PSR2, Squiz and Zend

3. 文档和代码

phpdoc

phpDocumentor 将注释转换为文档。

https://packagist.org/packages/phpdocumentor/phpdocumentor

composer global require phpdocumentor/phpdocumentor dev-master

或者

curl -OL https://github.com/phpDocumentor/phpDocumentor2/releases/download/v3.0.0-alpha1/phpDocumentor.phar
chmod +x phpDocumentor.phar
sudo mv phpDocumentor.phar /usr/local/bin/phpdoc
phpdoc run -d <SOURCE_DIRECTORY> -t <TARGET_DIRECTORY>

为项目生成文档:

phpdoc -d . -t doc

会生成 doc/idnex.html

4. 源代码管理 - 版本控制

  • 分布式 git
  • 集中式 svn

将版本库作为构建的第一步

在提交时自动运行测试、编码标准检查等。

5. 自动部署

5.1 立即切换到一个新版本

使用符号链接(syslink)

5.2 管理数据库变更

migration 的 up 和 down

5.3 自动部署和 Phing

问题:

  1. 部署代码要多久?
  2. 我们多久部署一次代码?

自动部署由一系列执行基本任务的脚本构成:

  1. 从版本控制系统中标记和导出代码。
  2. 将代码压缩成 tar 文件,传送至服务器并解压。
  3. 应用数据库补丁,如果需要。
  4. 创建到部件的链接???
  5. 切换符号链接(symlink),指向新的代码文件夹。
  6. 清空缓存并重新启动服务器。

你可以创建自己的 shell 脚本来完成上述工作,但也可以使用 Phing,一个用 PHP 编写并用于项目部署的工具。它有很多插件使我们可以顺利完成部署工作,而且它还有自己的数据库管理工具 dbdeploy。

composer global require phing/phing

Phing 使用基于 XML 的配置,默认保存在 build.xml 文件中。

将部署脚本保存在代码库中

每个项目都必须有一个自己的 build.xml 文件。

phing prepare

三个可用的 target(目标):

  • prepare
  • build
  • dist

默认目标是 dist,如果一个目标依赖于其他目标,它们将首先运行。