摘要:本文目的是通过自己写的一个的简单的库花密密码生成工具,来学习我认为的库开发的一些规范,以及上持续构建你的项目的一些方法。给自己的项目开启持续构建。包发布以及当你的代码完成后,测试完成后。
本文目的是通过自己写的一个php的简单的库(花密密码生成工具),
来学习我认为的php库开发的一些规范,以及github上持续构建你的项目的一些方法。其实是为了显示下边一系列的的徽章
本文涉及的内容有:
项目目录
php的psr规范
php备注的规范
php的包管理器composer
php保证代码质量(php-cs-fix,styleci,phpunit,coveralls)
php的持续集成Travis CI
php包发布Packagist 以及 LICENSE
更多的徽章获得
项目目录</>复制代码
/
|── bin/ //命令行目录
|── build/ //构建目录
|── src/ //用于存放项目源代码
|── tests/ //单元测试目录
| ├── ClassNameTest/ //测试目录
| |── phpunit.xml //phpunit 配置文件
| └── bootstrap.php //phpunit 引导文件
|── vendor/ //第三方依赖库
|── .gitignore //git忽略文件
|── .gitmessage //git提交规范文件
|── .php_cs //php-cs-fix配置文件
|── .styleci.yml //https://styleci.io配置文件
|── .travis.yml //Travis CI 配置文件
|── LICENSE //LICENSE
|── composer.json //composer配置
└── README.md //README
php的psr规范
详见
PSR-1 基本代码规范:
PSR-2 代码风格规范:(本篇规范是 PSR-1 基本代码规范的继承与扩展)
PSR-3 日志接口规范:
PSR-4 自动加载相关
PSR-7 HTTP消息相关
php备注的规范PHPDoc WIKI
@name 名字
@abstract 申明变量/类/方法
@access 指明这个变量、类、函数/方法的存取权限
@author 函数作者的名字和邮箱地址
@category 组织packages
@copyright 指明版权信息
@const 指明常量
@deprecate 指明不推荐或者是废弃的信息MyEclipse编码设置
@example 示例
@exclude 指明当前的注释将不进行分析,不出现在文挡中
@final 指明这是一个最终的类、方法、属性,禁止派生、修改。
@global 指明在此函数中引用的全局变量
@include 指明包含的文件的信息
@link 定义在线连接
@module 定义归属的模块信息
@modulegroup 定义归属的模块组
@package 定义归属的包的信息
@param 定义函数或者方法的参数信息
@return 定义函数或者方法的返回信息
@see 定义需要参考的函数、变量,并加入相应的超级连接。
@since 指明该api函数或者方法是从哪个版本开始引入的
@static 指明变量、类、函数是静态的。
@throws 指明此函数可能抛出的错误异常,极其发生的情况
@todo 指明应该改进或没有实现的地方
@var 定义说明变量/属性。
@version 定义版本信息
php的包管理器composer详见composer中文网
注意:如果访问不了国外镜像,可以全局修改使用中国镜像
</>复制代码
$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
php保证代码质量
这一部分现在有很多解决方案。在github搜索phpQA也很多集成工具包
在我这个项目主要用到的就是php-cs-fix,phpunit.为了保证在github的代码风格
,用了https://styleci.io。
有关php-cs-fix可以参考这篇文章文章学习 php-cs-fixer - PHP 编码格式化工具
但是上边文章是php-cs-fix 配置文件是1.*版本的。现在官网升级到2.*版本。
很多配置文件名变化了。具体变化可以参考官方说明UPGRADE.md
下边给出在这个项目里的配置.cs_php
</>复制代码
This source file is subject to the MIT license that is bundled
with this source code in the file LICENSE.
EOF;
$finder = PhpCsFixerFinder::create()
->files()
->name("*.php")
->exclude("vendor")
->in(__DIR__)
->ignoreDotFiles(true)
->ignoreVCS(true);
;
$fixers = array(
"@PSR2" => true,
"header_comment" => array("header" => $header),
"no_empty_statement" => true, //多余的分号
"no_extra_consecutive_blank_lines" => true, //多余空白行
"include" => true, //include 和文件路径之间需要有一个空格,文件路径不需要用括号括起来;
"no_trailing_comma_in_list_call" => true, //删除 list 语句中多余的逗号;
"no_leading_namespace_whitespace" => true, //命名空间前面不应该有空格;
"array_syntax" => array("syntax" => "short"), //数组 【】 php版本大于5.4
"no_blank_lines_after_class_opening" => true, //类开始标签后不应该有空白行;
"no_blank_lines_after_phpdoc" => true, //PHP 文档块开始开始元素下面不应该有空白行;
"object_operator_without_whitespace" => true, //(->) 两端不应有空格;
"binary_operator_spaces" => true, //二进制操作符两端至少有一个空格;
"phpdoc_indent" => true, //phpdoc 应该保持缩进;
"phpdoc_no_access" => true, //@access 不应该出现在 phpdoc 中;
"phpdoc_no_package" => true,
"phpdoc_scalar" => true, //phpdoc 标量类型声明时应该使用 int 而不是 integer,bool 而不是 boolean,float 而不是 real 或者 double;
"phpdoc_to_comment" => true, //文档块应该都是结构化的元素;
"phpdoc_trim" => true,
"phpdoc_no_alias_tag" => array("type" => "var"),// @type 需要使用 @var 代替;
"phpdoc_var_without_name" => true, //@var 和 @type 注释中不应该包含变量名;
"no_leading_import_slash" => true, //删除 use 前的空行;
//"no_extra_consecutive_blank_lines" => array("use"), //删除 use 语句块中的空行;
"self_accessor" => true, //在当前类中使用 self 代替类名;
"no_trailing_comma_in_singleline_array" => true, //PHP 单行数组最后一个元素后面不应该有空格;
"single_blank_line_before_namespace" => true,//命名空间声明前应该有一个空白行;
"single_quote" => true, //简单字符串应该使用单引号代替双引号;
"binary_operator_spaces" => array("align_equals" => true,"align_double_arrow" => true), //等号 => 对齐 symfony是不对齐的
"no_singleline_whitespace_before_semicolons" => true, //禁止只有单行空格和分号的写法;
"cast_spaces" => true, //变量和修饰符之间应该有一个空格;
"standardize_not_equals" => true, //使用 <> 代替 !=;
"concat_space" => array("spacing" => "one"), //点连接符左右两边有一个的空格;symfony是没空格
"ternary_operator_spaces" => true, //三元运算符之间的空格标准化
"trim_array_spaces" => true, //数组需要格式化成和函数/方法参数类似,上下没有空白行;
"unary_operator_spaces" => true, //一元运算符和运算数需要相邻;
"no_whitespace_in_blank_line" => true, //删除空白行中多余的空格;
"no_multiline_whitespace_before_semicolons" => true, //分号前的空格
"no_unused_imports" => true, //删除没用到的use
);
return PhpCsFixerConfig::create()
->setRules($fixers)
->setFinder($finder)
->setUsingCache(false);
另外php-cs-fix都有对应的编辑器插件比如:
PhpStorm
Sublime Text
Vim
styleci在规定了自己的代码规范之后,如何保证别人提交的pr是否符合你的规范呢。
这时候就需要用https://styleci.io。通过github帐号注册后。就可以关联你的项目。
在你的项目目录添加配置文件 .styleci.yml
下边是和上面.php_cs对应的我的styleci配置文件,具体可以看https://styleci.io文档
</>复制代码
preset: PSR2
risky: false
enabled:
- no_empty_statement
- no_extra_consecutive_blank_lines
- include
- no_trailing_comma_in_list_call
- no_leading_namespace_whitespace
- no_blank_lines_after_class_opening
- no_blank_lines_after_phpdoc
- object_operator_without_whitespace
- binary_operator_spaces
- phpdoc_indent
- phpdoc_no_access
- phpdoc_no_package
- phpdoc_scalar
- phpdoc_to_comment
- phpdoc_trim
- phpdoc_type_to_var
- phpdoc_var_without_name
- no_leading_import_slash
- remove_lines_between_uses
- self_accessor
- no_trailing_comma_in_singleline_array
- single_blank_line_before_namespace
- single_quote
- align_equals
- no_singleline_whitespace_before_semicolons
- cast_spaces
- standardize_not_equals
- concat_with_spaces
- ternary_operator_spaces
- trim_array_spaces
- unary_operator_spaces
- no_whitespace_in_blank_line
- no_multiline_whitespace_before_semicolons
- no_unused_imports
- align_double_arrow
- short_array_syntax
finder:
exclude:
- "vendor"
name:
- "*.php"
另外在https://styleci.io有这个徽章。,可以自己的项目添加上了。
phpunitphp单元测试,具体使用可以参考中文手册
这里配置好之后主要通过Travis CI进行调用,下边会讲到。
coverallscoveralls是利用phpunit生成测试代码覆盖率的xml,来展示你的代码覆盖率。
网址是https://coveralls.io/。 依然是github注册。然后在Travis CI进行调用。需要 satooshi/php-coveralls 这个库调用。
在这个coveralls配置好之后就可以添加这个徽章了。
登录https://travis-ci.org/,依然使用github注册之后。给自己的项目开启持续构建。添加配置文件, ``
</>复制代码
language: php
php:
# - 5.4
# - 5.5
- 5.6
- 7.0
# - 7.1
before_script:
- composer self-update
- composer install -n --dev --prefer-source
script:
- mkdir -p build/logs
- ./vendor/bin/phpunit -c tests/phpunit.xml --coverage-clover build/logs/clover.xml
after_script:
#coveralls调用 默认文件是build/logs/clover.xml,如果不是可以添加配置
- travis_retry ./vendor/bin/coveralls -v
matrix:
fast_finish: true
这时候push你的代码就可以开始持续构建了。另外在Travis CI可以获取这个徽章。
php包发布Packagist 以及 LICENSE当你的代码完成后,测试完成后。就可以发布到Packagist包管理平台了。
如果composer.json配置好,按照官网一步一步来还是比较容易的,记得设置hook自动更新。
另外如果你的composer设置的国内的镜像,大概会有一到两个小时的延迟。
关于LICENSE的选取,可以参考这篇文章如何选择开源许可证?
在发布完之后就可以去https://poser.pugx.org/ 获取这几个徽章了。
更多的徽章获得大家可以通过http://shields.io/这个网站来获得,获得去github添加更多的integrations,来获得相对应的徽章。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22195.html
摘要:创建帐号提供的是持续集成服务,简称。在这里引入的原因是我们的项目需要使用服务进行持续集成和测试,当然你也可以替换成别的单元测试工具。创建单元测试用例是单元测试类库家族中的一员,使用的一个主要目的是为我们的模块创建单元测试用例。 本文首发于 Travis CI 持续集成服务构建 Composer 类库简明教程,转载请注明出处! 在项目开发过程中,编码工作只是软件开发整个过程中的一小部分环...
摘要:这大概是我没有及早使用,或多数开发者流连现状造成的。它就是,一个的框架。行为驱动开发是来自测试驱动开发的开发过程。简单的说,它就是经常可能一天几次将小块代码整合进基础代码当中的行为。 showImg(https://segmentfault.com/img/remote/1460000013769815); 这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍 。 文章...
摘要:集成测试完成后,由运维同学从发起一个到分支,此时会会运行单元测试,构建镜像,并发布到预发布环境测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作运维同学合并,将为本次发布的代码及镜像自动打上版本号并书写,同时发布到生产环境。 云原生 (Cloud Native) 是伴随的容器技术发展出现的的一个词,最早出自 Pivotal 公司(即开发了 Spring 的公司)的一本技术小...
摘要:集成测试完成后,由运维同学从发起一个到分支,此时会会运行单元测试,构建镜像,并发布到预发布环境测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作运维同学合并,将为本次发布的代码及镜像自动打上版本号并书写,同时发布到生产环境。 云原生 (Cloud Native) 是伴随的容器技术发展出现的的一个词,最早出自 Pivotal 公司(即开发了 Spring 的公司)的一本技术小...
摘要:来这里看看的工程师如何进行持续集成与持续部署。主要介绍了豆瓣移动持续集成和测试相关实践,用工具化自动化社会化测试来解决遇到的问题,将打包发布环节自动化。这期的持续集成实践分享就到这里。 我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集成...
阅读 4297·2023-04-26 01:48
阅读 3374·2021-10-13 09:40
阅读 1833·2021-09-26 09:55
阅读 3739·2021-08-12 13:23
阅读 1991·2021-07-25 21:37
阅读 3523·2019-08-30 15:53
阅读 1470·2019-08-29 14:16
阅读 1468·2019-08-29 12:59