composer
刚开始接触composer的是一直不明觉厉。自从开始使用composer安装各种第三方包,越来越喜欢php的这个特性,以前的时候从没想过php也能实现这种效果。最近突然产生一种冲动,想把自己编写的功能做成一个工具包,单独的放在composer包中方便再次使用。
我先把composer文档稍微细致地看了一遍,然后明白了如何开发第三方包,与平常的php程序编写基本一致,唯一不同的是要维护一个composer.json的配置文件,用于管理当前包的目录结构,依赖包,命名空间等信息。
看一个比较简单的包配置(来自curl/curl):
{ "name": "curl/curl", "description": "cURL class for PHP", "keywords": ["dot", "curl"], "homepage": "https://github.com/php-mod/curl", "type": "library", "license": "MIT", "authors": [ { "name": "php-curl-class", "homepage": "https://github.com/php-curl-class" }, { "name": "Hassan Amouhzi", "email": "hassan@anezi.net", "homepage": "http://hassan.amouhzi.com" }, { "name": "user52", "homepage": "https://github.com/user52" } ], "require": { "php": ">=5.3.0", "ext-curl": "*" }, "require-dev": { "phpunit/phpunit": "3.7.*", "squizlabs/php_codesniffer": "~2.1" }, "autoload": { "psr-0": { "Curl": "src/" } } }
composer.json的个字段解释在官方文档中有详细介绍:https://getcomposer.org/doc/04-schema.md
phpunit
开发第三方包必然存在一个客观的问题,如何调试程序。最后程序是要集成到别的项目里面才能运行的。这也是我接触php以来,总萦绕在我心里的大问题,那就是单元测试。平常做web开发基本都不使用单元测试,即使抽象了一些函数或方法,也要等到程序合龙时,能够在网页打印结果的时候才能验证函数或方法的有效性。一直如此,似乎我遇到的人也是如此。大家都不用单元测试,于是羊群效应开始蔓延,我也不用,哈哈....大家都不用不代表就是合适的。我一直想尝试使用单元测试来提高程序健壮性。终于迎来了这个契机。
开发composer包的时候,每次都在一个web项目里测试效率未免太低下,可能真正开发的时间还不如测试的时间多。
幸好看的这个curl/curl项目中都添加了phpunit的配置。在composer中可以通过require-dev引入phpunit。vendor/bin中就会出现phpunit的可执行文件。当然也可以自己手动配置全局的phpunit环境。官方文档中给出了安装教程:
像在curl/curl项目根目录直接执行phpunit就可以自动测试各种功能了。原因是项目根目录存在一个针对phpunit的配置文件phpunit.xml.dist,其内容如下:
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" syntaxCheck="true" verbose="false" bootstrap="vendor/autoload.php" > <php> <ini name="display_errors" value="on"/> </php> <testsuites> <testsuite name="PHP MP4Box Tests Suite"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
官方文档也给出了这个用法的解释:用 XML 配置来编排测试套件当然还可以直接在命令行中运行测试,我觉得这种方式更加统一在多人合作的时候更方便。命令行运行方式
总结
经过这次研究,对composer的认识更加深刻,可以开发自己的composer包了。最令我高兴的是可以使用phpunit进行开发了。phpunit确实好用且好配置。对于phpunit的一些使用细节在开发过程中再进一步研究。