PHP 扩展开发检测清单(扩展开发必读)

想要做出一个成功的 PHP 扩展包,不仅仅是简单的将代码放进文件夹中就可以了,除此之外,还有非常多的因素来决定你的扩展是否优秀。以下清单的内容将有助于完善你的扩展,并且在 PHP 社区中得到更多的重视。
1. 为你的扩展选择一个正确合适的名字
- 确保你的命名没有被其他项目使用。
- 扩展的名字需要和你的 PHP 命名空间保持一致。
- 不要在你的命名空间中使用自己的姓名或者其他带有个人色彩的东西。
2. 将你的扩展开源
3. 对自动加载友好一些
- 使用 PSR-4 兼容的自动加载器命名空间。
- 请将代码放在
src文件夹里。
4. 通过 Composer 发布
5. 不局限于框架
- 不要局限于项目只能使用在一个框架上。
- 通过服务提供器来给框架提供特殊支持。
6. 遵循一种编码风格
- 强烈建议你坚持使用 PSR-2 编码风格。
- 使用代码自动格式化工具,比如 PHP Coding Standards Fixer 。
- 使用代码风格检测工具,比如 PHP Code Sniffer 。
7. 编写单元测试
- 覆盖大部分的代码。
- 使用 PHPUnit ,一个常用的 PHP 单元测试框架。
- 其他可选: phpspec , Behat , atoum , Codeception。
8. 为代码写注释
- 将注释当作内置文档来看待。
- 代码注释也可以改善 IDE 的代码自动完成功能, 比如 PhpStorm 。
- 可以自动转换成 API 文档, 查看 phpDocumentor 。
9. 使用语义化版本管理
- 使用 语义化版本号 来管理版本号。
- 遵循 主版本.次版本.补丁版本 规范。
- 让开发人员安全的升级软件,而不用担心会产生破坏性的改动。
- 请记得及时给发布版本打上标签!
10. 保持定期更新日志
- 明确标记并展示出版本之间显著的变化。
- 考虑遵循 Keep a CHANGELOG 的格式进行编写。
11. 使用持续集成
- 使用服务来自动检查编码是否标准并且能否通过运行测试。
- 在多个不同的 PHP 版本都进行运行测试会是个不错的办法。
- 确保提交或者拉取的时候都可以自动运行。
- 参考:Travis-CI,Scrutinizer, Circle-CI。
12. 编写大量的使用文档
- 一份优秀的文档对于扩展包来说至关重要。
- 至少要确保库中有详细的 README (自述) 文件。
- 可以尝试在 GitHub Pages 中托管文档。
- 可用参考: Read the Docs。
13. 包含一份授权(License)
- 包含一份授权协议,能够很有效地保护你的工作成果,并且很容易做到。
- 参考 choosealicense.com。 大部分PHP 开源项目使用 MIT 协议。
- 至少要在代码库中包含 LICENSE 文件。
- 还可以考虑在 Docblocks 中加入你的授权协议。
14. 欢迎大家的贡献
- 想要大家辅助改进项目,那一定要多多请求大家的贡献!
- 有一份 CONTRIBUTING 文件,列出贡献者的名单。
- 利用这份文件解释项目环境要求,例如测试环境。
更多现代化 PHP 知识,请前往 Laravel / PHP 知识社区
PHP 扩展开发检测清单(扩展开发必读)的更多相关文章
- PHP开发第一个扩展
首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 一.PHP环境的搭建 1)一般使用源码包编译安装,而不是binary包安装.因为使用PHP ...
- Chrome扩展开发之一——Chrome扩展的文件结构
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- Asp.net Mvc模块化开发之分区扩展框架
对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...
- iOS开发---分类和扩展(Categories和Extensions)
1.分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法. 此外,分类能够保证你的实现类和其他的文件区分开. 1 #import “UIViewControl ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- web开发性能优化---扩展性能篇
1.实现代码分离 一个成熟的软件开发团队一般都不会全然手写代码.这里讲的代码分离仅仅要是开发中用到的小技巧,通过底层框架+手工代码方式结合实现高速开发和高速扩展. Code目录内文件不同意改动,目录主 ...
- 我的VSTO之路(五):Outlook初步开发之联系人扩展
原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...
- 常用网站开发类Firefox扩展插件 (转)
作为一个 Web 开发人员,你几乎没有理由不喜欢Firefox,因为在Firefox下有很多专门针对开发的扩展插件,非常好用,这里就介绍一些常用的针对网站开发的FireFox扩展,供Web开发人员参考 ...
随机推荐
- System V IPC 之信号量
本文继<System V IPC 之共享内存>之后接着介绍 System V IPC 的信号量编程.在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类. 信号量的分类 在 ...
- Spring 以及 Spring MVC Bean元素以及@Bean (Bean 等价于 注解 ??? 没理解错误吧)
①.由衷鸣谢Bossen <还是没看懂o(╥﹏╥)o><> {声明Spring Bean和注入Bean的几种常用注解和区别} Bean在Spring和SpringMVC中无所不 ...
- JAVA_SE基础——44.抽象类的练习
抽象类要注意的细节: 1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象 的函数..2. 如果一个类出现了抽象的函数,那么该类也必须 使用abstract修饰. ...
- python 基础 set 集合类型补充
为啥今天又重提这个数据类型呢?平时用的少,等要用起来的时候才发现,自己对这块啥都不知道了,so,今天就把这块再梳理一下咯. 一.set集合,是一个无序且不重复的元素集合.这一点是非常重要的. 二.集合 ...
- python 人工智能资源推荐
原创 2017-06-05 玄魂工作室 玄魂工作室 我翻了翻我自己曾经看过的书,还是放弃了推荐.原因很简单,我对这个领域并不是很熟悉,我来推荐资源有点误人子弟.so,简单推点其他人建议给我的内容,希望 ...
- webpack你值得拥有-从四个核心配置谈起
很久没有发文章了,但是强调一点,大-熊同学最近可没闲着.学习算法,复习计算机网络,也顺便学习了一下webpack,看了看操作系统(没办法,都没学,要是不学连实习笔试都过不了,伤心--).本来比较纠结是 ...
- 第5章 子网划分和CIDR
第5章 子网划分和CIDR 划分网络 根据A类.B类或C类网络ID来识别网段具有一些局限性,主要是在网络级别之下不能对地址空间进行任何逻辑细分 如果一个IP是一个A类网络.数据报到达网关,然后传输到9 ...
- proxymysql的安装与应用
具体的资料我们可以查看官方的文档:https://github.com/sysown/proxysql/wiki/ProxySQL-Configuration 推荐下载最新的Proxysql. 下面跟 ...
- SpringCloud的服务注册中心(四)- 高可用服务注册中心的搭建
一.双 服务注册注册中心 1.服务注册中心的服务端 - EurekaServer 1.1.EurekaServer1 String.application.name=eureka-server ser ...
- C#日志文件
写日志文件是一个很常用的功能,以前都是别人写好的,直接调用的,近期写了一个小工具,因为比较小,所以懒得引用dll文件了,直接上网找了一个,很方便,现在记录下 public class LogClass ...