极速上手 PHP 扩展包开发

完整项目请参考 free-andy/demo

基础目录结构

这里采用业界约定俗成的结构,但其实你可以随意发挥,并没有强制要求


demo/
├── .gitignore     # git 过滤文件
├── readme.md      # 说明文件
├── composer.json
├── src            # 源代码目录,编码请符合 PSR-2 规范,代码组织结构请符合 PSR-4 规范 
│   └── .gitkeep   # 保证 git 能提交空目录
└── tests          # 测试代码目录
    └── .gitkeep

composer.json

该文件基础内容可通过 composer init 生成,也有人开发了相应的构建工具,比如 overtrue/package-builder,这里我直接贴上本次需要的内容


{
  "name": "free-andy/demo",
  "description": "demo",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "free-andy",
      "email": "free-andy@foxmail.com"
    }
  ],  
  "autoload": {  # 自动加载命名空间,记得运行 composer dump-autoload
    "psr-4": {
      "FreeAndy\\Demo\\": "src/"
    } 
  },
  "require-dev": { # 开发依赖项
    "phpunit/phpunit": "^8.2"
  }
}

写一个 Demo

我只想说明扩展包的开发流出程,并不想教谁如何写代码,就简单写几句了

扩展包源码 src/Demo.php


namespace FreeAndy\Demo;

class Demo
{
    public function name()
    {
        return 'free-andy';
    }

    public function email()
    {
        return 'free-andy@foxmail.com';
    }
}

单元测试 tests/DemoTest.php


namespace FreeAndy\Demo\Tests;

use FreeAndy\Demo\Demo;
use PHPUnit\Framework\TestCase;

class DemoTest extends  TestCase
{
    public function testName()
    {
        $this->assertEquals('free-andy', $this->getInstance()->name());
    }

    public function testEmail()
    {
        $this->assertEquals('free-andy@foxmail.com', $this->getInstance()->email());
    }

    protected function getInstance()
    {
        return new Demo();
    }
}

执行 phpunit 命令vendor/bin/phpunit tests,务必保证代码通过该测试

项目测试

这一步是通过本地资源包的形式模拟上线后通过 composer require free-andy/demo 载入使用


mkdir package-test && cd package-test

# 初始化一个 composer.json 文件
composer int

# path 后面填写扩展包所在的相对路径
composer config repositories.demo path ../demo  

# dev-master 表示 master 分支下的最新提交
composer require free-andy/demo:dev-master

创建一个 demo.php 假装在项目里面使用


require __DIR__ . '/vendor/autoload.php';

$demo = new FreeAndy\Demo\Demo();

echo $demo->name();

echo $demo->email();

发布到 packagist

  1. push 到 github
  2. 在 github 项目中创建版本号 (Create new release)
  3. 在 packagist 填写 github 项目地址

介于此类文章多如 牛毛 ,此处就不详述了,在 packagist 可以找到 该项目

文档信息
发表日期:2019-06-08