想要做出一个成功的 PHP 扩展包,不仅仅是简单的将代码放进文件夹中就可以了,除此之外,还有非常多的因素来决定你的扩展是否优秀。以下清单的内容将有助于完善你的扩展,并且在 PHP 社区中得到更多的重视。

1. 为你的扩展选择一个正确合适的名字

  • 确保你的命名没有被其他项目使用。
  • 扩展的名字需要和你的 PHP 命名空间保持一致。
  • 不要在你的命名空间中使用自己的姓名或者其他带有个人色彩的东西。

2. 将你的扩展开源

  • GitHub 可以免费管理这一类公共的项目。
  • GitHub 非常有助于你来管理这个开源项目,并且方便他人获取你的扩展。
  • 如果你不想使用,可以尝试替代品: Bitbucket.

3. 对自动加载友好一些

  • 使用 PSR-4 兼容的自动加载器命名空间。
  • 请将代码放在 src 文件夹里。

4. 通过 Composer 发布

  • 确保可以通过 Composer 来找到你的类库, Composer 是PHP的一个依赖管理工具
  • 发布在 Packagist上,Packagist 是一个主要的 Composer 包仓库。

5. 不局限于框架

  • 不要局限于项目只能使用在一个框架上。
  • 通过服务提供器来给框架提供特殊支持。

6. 遵循一种编码风格

7. 编写单元测试

8. 为代码写注释

  • 将注释当作内置文档来看待。
  • 代码注释也可以改善 IDE 的代码自动完成功能, 比如 PhpStorm
  • 可以自动转换成 API 文档, 查看 phpDocumentor

9. 使用语义化版本管理

  • 使用 语义化版本号 来管理版本号。
  • 遵循 主版本.次版本.补丁版本 规范。
  • 让开发人员安全的升级软件,而不用担心会产生破坏性的改动。
  • 请记得及时给发布版本打上标签!

10. 保持定期更新日志

  • 明确标记并展示出版本之间显著的变化。
  • 考虑遵循 Keep a CHANGELOG 的格式进行编写。

11. 使用持续集成

  • 使用服务来自动检查编码是否标准并且能否通过运行测试。
  • 在多个不同的 PHP 版本都进行运行测试会是个不错的办法。
  • 确保提交或者拉取的时候都可以自动运行。
  • 参考:Travis-CIScrutinizerCircle-CI

12. 编写大量的使用文档

  • 一份优秀的文档对于扩展包来说至关重要。
  • 至少要确保库中有详细的 README (自述) 文件。
  • 可以尝试在 GitHub Pages 中托管文档。
  • 可用参考: Read the Docs

13. 包含一份授权(License)

  • 包含一份授权协议,能够很有效地保护你的工作成果,并且很容易做到。
  • 参考 choosealicense.com。 大部分PHP 开源项目使用 MIT 协议
  • 至少要在代码库中包含 LICENSE 文件。
  • 还可以考虑在 Docblocks 中加入你的授权协议。

14. 欢迎大家的贡献

  • 想要大家辅助改进项目,那一定要多多请求大家的贡献!
  • 有一份 CONTRIBUTING 文件,列出贡献者的名单。
  • 利用这份文件解释项目环境要求,例如测试环境。

更多现代化 PHP 知识,请前往 Laravel / PHP 知识社区

PHP 扩展开发检测清单(扩展开发必读)的更多相关文章

  1. PHP开发第一个扩展

    首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 一.PHP环境的搭建 1)一般使用源码包编译安装,而不是binary包安装.因为使用PHP ...

  2. Chrome扩展开发之一——Chrome扩展的文件结构

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  3. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  4. Asp.net Mvc模块化开发之分区扩展框架

    对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...

  5. iOS开发---分类和扩展(Categories和Extensions)

      1.分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法.   此外,分类能够保证你的实现类和其他的文件区分开.   1 #import “UIViewControl ...

  6. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. web开发性能优化---扩展性能篇

    1.实现代码分离 一个成熟的软件开发团队一般都不会全然手写代码.这里讲的代码分离仅仅要是开发中用到的小技巧,通过底层框架+手工代码方式结合实现高速开发和高速扩展. Code目录内文件不同意改动,目录主 ...

  8. 我的VSTO之路(五):Outlook初步开发之联系人扩展

    原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...

  9. 常用网站开发类Firefox扩展插件 (转)

    作为一个 Web 开发人员,你几乎没有理由不喜欢Firefox,因为在Firefox下有很多专门针对开发的扩展插件,非常好用,这里就介绍一些常用的针对网站开发的FireFox扩展,供Web开发人员参考 ...

随机推荐

  1. 根据HTML5的新方法 drag & drop 方法实现表格拖拽实例

    上一次学习了html5的drag和drop方法,传送门  就自己写了个例子加深自己对drag和drop的理解.不过一开始不是很简单,遇到了不少问题.还好网络万能的,什么都能查到,总算完成了. 说明和详 ...

  2. Spring+Hibernate+Struts(SSH)框架整合

    SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...

  3. centos7.4下离线安装CDH5.7

    (一)安装前的规划 (1)操作系统版本:centos7.4(64bit) [root@hadoop22 etc]# more /etc/centos-release CentOS Linux rele ...

  4. angular路由守卫

     路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用.比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离 ...

  5. api-gateway实践(14)前端签名密钥和后端签名密钥

    1.前端签名密钥 1.1.缓存管理初始:engine初始的时候,从redis拉取全部前端绑定关系到engine缓存.新增/绑定:绑定签名密钥和服务实例,同时缓存该关系到redis,同时缓存到engin ...

  6. Server.MapPath找不到命名空间,解决办法

    最近在做微信公众号开发,在网上找了个例子实现获取Access_token的值,需要读取xml文件,结果就遇到这个问题

  7. python运算符重载(二)

    一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...

  8. Web微信

    一.源代码地址: https://github.com/HuangAm/Webweixin 二.总结: 1.分析Http请求 - 请求方式:get.post等等 - URL:每个请求的url,固定部分 ...

  9. POJ-2109 Power of Cryptography(数学或二分+高精度)

    题目链接: https://vjudge.net/problem/POJ-2109 题目大意: 有指数函数 k^n = p , 其中k.n.p均为整数且 1<=k<=10^9 , 1< ...

  10. requests-认证设置

    #如果需要用户名和密码才能登陆网站,则需要认证设置auth=() import requests response = requests.get(url,auth=('user','password' ...