RFC 2119 解读

简介 RFC2119 是技术文档中的规范用语要求,针对若干个关键词进行说明,解释其在文档中的具体用法。在使用中所有字母都必须是大写的。 了解它的规定有利于解读英文文档的具体用意。 所有遵循该规定的文档都在开头包含以下文字 The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. 1. MUST:等同于"REQUIRED“和”SHALL"。 必须使用 2. MUST NOT:等同于"SHALL NOT"。 必须避免使用 3. SHOULD:等同于"RECOMMENDED"。 推荐使用方式,但在某些特定情况下可以忽略。如果需要采用不同的方式,请务必仔细斟酌 4. SHOULD NOT:等同于"NOT RECOMMENDED"。 推荐不使用方式,但在某些特定情况下可以忽略。如果需要采用不同的方式,请务必仔细斟酌 5. MAY:等同于"OPTIONAL"。 可选可不选 官方文档: https://tools.ietf.org/html/rfc2119

October 25, 2016 · 1 min · 55 words · Eric Yang

简要说明语义化版本号的具体用法

版本格式:主版本号.次版本号.修订版本号,版本号递增规则如下 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订版本号:当你做了向下兼容的问题修正。 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。 具体要求 必须包含公共API,定义在代码或文档中。 格式必须是 X.Y.Z。 非负,从0开始。 每次代码修改必须调整版本号。 主版本号为0时(0.Y.Z) 为开发阶段,可随意修整代码。 1.0.0 是公共API的起始版本号。 修订版本号为修复BUG递增版本号,向后兼容。 新增功能后次版本号增长。必须保证向后兼容。修订版本号归零。 新增不能向后兼容的功能后,主版本号增长,次版本号及修订版本号归零。 先行版本号,即已发布非正式的版本号标注。必须从1.0.0开始。 在版本号后以-a.a...的形式追加。 a 可为字母单词数字横杠(-), 不可为空。范例:1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92。 版本编译信息追加。在先行版本号以+b.b...的形式追加。 b可为字母单词数字横杠(-), 不可为空。范例:1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。 版本优先级。 从左到右依次比较。先行版本号及版本编译信息的比较中以.切割比较,有编号高于无编号,字母编号高于编号数字。范例:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。 基于官方文档2.0.0版本翻译解释 文档地址: http://semver.org/

October 25, 2016 · 1 min · 47 words · Eric Yang

PSR标准解读 - PHP进阶 (2)

PSR-0 自动加载的标准结构 (虽然已不被推荐使用,但composer还在支持) 要点 结构: \<Vendor Name>\(<Namespace>\)*<Class Name> 第一层级的命名为开发人员的标识 完整的命名空间可包含多个层级 在加载文件的时候,命名空间的分隔符\会被DIRECTORY_SEPARATOR替换 类名中的_会被DIRECTORY_SEPARATOR替换,所以_无任何意义 在加载文件的时候,命名空间会补全.php后缀 命名空间及类命名可以大小写随意 示例: \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php 需要注意的是,层级目录会重复vendor和namespace。 加载器的实现示例 <?php function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strrpos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; } spl_autoload_register('autoload'); ### PSR-1 基本代码样式 * 标签 (PHP tags) 代码必须包含在<?...

October 3, 2016 · 2 min · 268 words · Eric Yang