0%

PHP开发SDK

阿斯伯格综合征(Asperger syndrome,简称AS)是广泛性发展障碍(PDD)中的一种综合征,属于孤独症谱系障碍(ASD)。其重要特征是社交与非言语交际障碍,同时伴随着兴趣狭隘及重复特定行为,但相较于其他孤独症谱系障碍,仍相对保有语言及认知发展。患者经常出现肢体笨拙和语言表达方式异常等状况,偶尔会发出怪声音,但并不作为诊断依据。其症状一般在两岁前出现,并伴随患者终生。

一、基础

  1. PSR规范,是PHP Standard Recommendations(PHP推荐标准)的简写,由PHP FIG组织制定的PHP规范,是PHP开发的实践标准。具体规范如下
NUM TITLE EDITOR(S) / MAINTAINERS STATUS
0 Autoloading Standard Deprecated
1 Basic Coding Standard vacant Accepted
2 Coding Style Guide Deprecated
3 Logger Interface Jordi Boggiano Accepted
4 Autoloading Standard vacant Accepted
5 PHPDoc Standard Chuck Burgess Draft
6 Caching Interface Larry Garfield Accepted
7 HTTP Message Interface Matthew Weier O’Phinney Accepted
8 Huggable Interface Larry Garfield Abandoned
9 Security Advisories Michael Hess Abandoned
10 Security Reporting Process Michael Hess Abandoned
11 Container Interface Matthieu Napoli, David Négrier Accepted
12 Extended Coding Style Guide Korvin Szanto Accepted
13 Hypermedia Links Larry Garfield Accepted
14 Event Dispatcher Larry Garfield Accepted
15 HTTP Handlers Woody Gilk Accepted
16 Simple Cache Paul Dragoonis Accepted
17 HTTP Factories Woody Gilk Accepted
18 HTTP Client Tobias Nyholm Accepted
19 PHPDoc tags Chuck Burgess Draft
20 Clock Chris Seufert Accepted
21 Internationalization Navarr Barnier Draft
22 Application Tracing Adam Allport Draft

中文翻译入口

  1. 注意事项

    • 命名空间: 使用命名空间来组织你的类和功能。
    • 自动加载: 使用Composer的自动加载机制或者在你的SDK中实现自己的自动加载器。
    • 版本控制: 确保你的SDK遵循语义化版本控制(Semantic Versioning)。
    • 单元测试: 编写单元测试来确保你的SDK的功能按预期工作,并且有很高的代码覆盖率。
    • 文档化: 编写清晰的文档来说明如何安装SDK,如何使用API,以及可能遇到的常见问题。
    • 错误处理: 优雅地处理错误和异常,向开发者清晰说明问题所在。
    • 兼容性: 确保你的SDK能在不同版本的PHP上运行,并且兼容主流的框架。
    • 安全性: 确保你的SDK在处理敏感数据时采取了安全措施,比如数据加密、输入验证等。
    • 性能: 优化SDK以提高性能,减少延迟。
    • 更新维护: 保持SDK的更新和维护,修复已知问题,添加新功能。
  2. 几个方面

    • 功能设计:在开发SDK之前,首先需要明确SDK所需实现的功能。这可以通过与开发者或产品经理的讨论来确定。确保在设计SDK功能时,考虑到了开发者的实际需求和常见使用场景。
    • 代码结构:良好的代码结构可以提高SDK的可维护性和易用性。建议采用面向对象的方式设计SDK,将不同的功能模块划分为独立的类。这样可以使代码更加清晰、可扩展性更高。
    • 接口设计:SDK的接口设计应该简单明了,易于使用。在设计方法和参数时,需考虑到开发者的常见操作。建议提供必要的输入参数,并在接口注释中清晰地说明参数的含义和使用方式。
    • 错误处理:良好的错误处理是开发SDK时必不可少的。建议设计适合的错误码和错误信息,以便开发者能够明确地知道发生了什么问题,并可以针对错误进行相应的处理。
    • 文档和示例代码:提供详细的文档和示例代码可以帮助开发者更快地上手使用SDK。文档应包括SDK的安装、配置和使用说明,以及常见问题的解答。示例代码应涵盖SDK的主要功能,并包含详细的注释。
    • 单元测试:在开发SDK的过程中,进行单元测试是必不可少的。通过编写测试用例,可以确保SDK的各个功能模块能够正常工作,并及时发现和修复潜在的问题。

二、开干

  1. 注册github账号,配置ssh-key等,此处不再赘述
  2. 登录github,新建一个仓库,如my-first-packagist
  3. 回到本机,克隆刚新建的仓库 git clone https://github.com/liusirdotnet/my-first-packagist.git
  4. 切换到仓库目录 cd my-first-packagist
  5. 初始化composer.json文件 composer init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$ composer init

Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

// 1. 输入项目命名空间,默认【用户名/仓库名】
Package name (<vendor>/<name>) [dell/htdocs]: yourname/projectname

// 2. 项目描述
Description []: 这是一个测试

// 3. 输入作者信息,可以直接回车,默认当前git配置的信息
Author [test <123@qq.com>, n to skip]:

// 4. 输入最低稳定版本,stable, RC, beta, alpha, dev
Minimum Stability []: dev

// 5. 输入项目类型,
Package Type (e.g. library, project, metapackage, composer-plugin) []: library

// 6. 输入授权类型
License []: MIT //github建仓库时可指定,不写的话packagist会报错

> Define your dependencies.
// 7. 输入依赖信息
Would you like to define your dependencies (require) interactively [yes]?

// 7.1如果需要依赖,则输入要安装的依赖
Search for a package: php

// 7.2输入版本号,如需多个则重复7.1和7.2
Enter the version constraint to require (or leave blank to use the latest version): >=5.6

// 8. 是否需要require-dev,操作同7
Would you like to define your dev dependencies (require-dev) interactively [yes]?

{
"name": "yourname/projectname",
"description": "这是一个测试",
"type": "library",
"require": {
"php": ">=5.6"
},
"require-dev": {
"php": ">=5.6"
},
"license": "",
"authors": [
{
"name": "test",
"email": "test@qq.com"
}
],
"minimum-stability": "dev"
}

// 9. 是否生成composer.json
Do you confirm generation [yes]? yes
  1. 编辑composer.json文件,添加自动加载
1
2
3
4
5
"autoload": {
"psr-4": {
"namespace_name\\": "src/" //自定义命名空间名称,和类文件命名空间保持一致
}
}
  1. 新建src/Test.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

/**
* This is a test class
*
* @detail null
* @author Name <email@email.com>
* @date 2018-06-17
* @version v1.0
*/

namespace Liusir; // 注意命名空间与composer.json中的一致

class Test
{
/**
* This is a test function
*
* @access public
* @param string $arg1 参数一的说明
* @param int $arg2 参数二的说明
* @param mixed $mixed 这是一个混合类型
* @return array 返回类型
* @author Name <email@email.com>
* @date 2018-06-17
*/
public function testFunc()
{
echo 'This is a test script';
}
}
  1. 生成vendor目录 composer install
  2. 跟src同级目录新建demo.php
1
2
3
4
5
6
7
require './vendor/autoload.php';

use Liusir\Test;

$test = new Test();

$test->testFunc();
  1. 提交并推送到github
1
2
3
git add .
git commit -m 'first commit'
git push
  1. 发布到packagist

    • 注册packagist
    • 点击submit
    • 将github仓库输入到输入框,Check && Submit
  2. 切换到另一个项目目录,安装刚发布的包 composer require liusirdotnet/my-first-packagist,报错

1
2
3
4
  [InvalidArgumentException]                                                                                                                
Could not find a matching version of package liuyulong/second-packagist. Check the package spelling, your version constraint and that th
e package is available in a stability which matches your minimum-stability (stable).
require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...
  1. 打一个tag并推送到github
1
2
3
git tag -a v1.0 -m 'first tag'
git push
git push origin v1.0
  1. 回到github后台并进入当前仓库,点击release选项,点击Draft a new release按钮,勾选下面的This is a pre-release,最后点击Publish release按钮

  2. 切换到另一个项目目录,安装刚发布的包 composer require liusirdotnet/my-first-packagist

  3. 新建index.php

1
2
3
4
5
6
<?php
require './vendor/autoload.php';
use RabbitMQ\RabbitMQ;

$ob = new RabbitMQ;
$ob->test();
  1. 设置更新composer包自动更新packagist【github停止此服务了】
    • 在packagist后台获取 API Token
    • 进入当前仓库,点击settings,点击add service,选择packagist,输入表单后添加add service按钮,最后点击Update service

Note: GitHub Services have been deprecated. Please contact your integrator for more information on how to migrate or replace a service with webhooks or GitHub Apps.

三、参考

  1. 参考一
  2. 参考二
  3. 参考三
  4. 参考四