【相干学习保举:php图文教程】
本文是协助初学者搭建根底的 php composer 包, 本名目源码地点
- github
- packagist
目次构造以及初建预备
起首创立一个目次来寄存一切文件, 这里我 定名为 util-demo , 目次中需求蕴含两个目次 src/, tests/, 一切的代码需求搁置到 src/ 目次, 一切的测试文件需求搁置到 tests/ 目次
初始化文件夹, 并应用 git 初始化名目, 便于进行版本治理
$ mkdir util-demo $ cd util-demo $ git init复制代码
初始化 composer
这里假设你曾经装置了 composer, 假如不装置, 请到 getcomposer.org/download/ 进行装置
初始化并输出包名, 这里默许应用 duoli/util-demo 包名
$ composer init
Welcome to the Composer config generator
This co妹妹and will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [duoli/util-demo]:
复制代码输出形容
Description []: first util package demo复制代码
输出作者称号, n 跳过
Author [duoli <zhaody901@126.com>, n to skip]: 复制代码
设定包的稳固版本, 默许是 stable, 具体查看 minimum-stability (root-only)
Minimum Stability []: 复制代码
装置类型 : Package Type, 默许是 library
Package Type (e.g. library, project, metapackage, composer-plugin) []: 复制代码
License, 协定, 对于协定局部, 你能够抉择本人需求的协定, 阮教师这里有一个浏览指南, 能够进行参考 若何抉择开源答应证?, 关于协定局部的写法能够参考 答应协定 license 这里
License []: 复制代码
require
设定三方依赖, 标明以后名目/包能否有依赖于其余包进行开发, 这里抉择 no,
Define your dependencies. # 消费依赖 Would you like to define your dependencies (require) interactively [yes]? 复制代码
require-dev
开发依赖, 这里咱们退出 phpunit 作为单位测试依赖
Would you like to define your dev dependencies (require-dev) interactively [yes]? Search for a package: phpunit Found 15 packages matching phpunit [0] phpunit/phpunit ... [14] brianium/paratest Enter package # to add, or the complete package name if it is not listed: 0 Enter the version constraint to require (or leave blank to use the latest version): Using version ^8.5 for phpunit/phpunit Search for a package: 复制代码
当没有需求额定添加包的时分, 间接回车, 确认装置包依赖, 初始化实现
{
"name": "duoli/util-demo",
"description" : "first util package demo",
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"license": "MIT",
"authors": [
{
"name": "duoli",
"email": "zhaody901@126.com"
}
],
"require": {}
}
Do you confirm generation [yes]?
Would you like to install dependencies now [yes]? yes
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 29 installs, 0 updates, 0 removals
- Installing sebastian/version (2.0.1): Downloading (100%)
......
- Installing phpunit/phpunit (8.5.8): Downloading (100%)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0.0)
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
5 packages you are using are looking for funding.
Use the `composer fund` co妹妹and to find out more!复制代码上边初始化实现之后, 咱们文件目次应该以下所示
. ├── composer.json ├── composer.lock └── vendor复制代码
作为担保理来说, 咱们需求疏忽 composer.lock 以及 vendor 文件夹, 由于正在名目中应用此包的时分会进行全局的装置, 没有提交是为了避免孕育发生冗余代码.
咱们退出 .gitignore 文件, 退出这两个文件夹的疏忽, 另外因为要天生 phpunit 测试文件, 咱们还需求退出 .phpunit.* , 我这里还额定退出了 IDE 的疏忽
.gitignore
# ide .idea # project composer.lock vendor/ # phpunit .phpunit.*复制代码
文件主动加载 autoload
autoload
这里是上边初始化不说起到的, autoload 指定了包的加载形式, Composer 能够主动加载包内文件, 然而你需求指定你的文件的加载形式, 这里咱们应用的是 psr-4 规范, 具体的标准能够浏览 PSR-4 主动加载标准
这里需求正在 composer.json 中追加
... "autoload": { "psr-4": { "Duoli\\UtilDemo\\": "src", "Duoli\\UtilDemoTests\\": "tests"
}
}
...
复制代码由于这个加载是后续增加的, 想要辨认需求咱们手动运转下 composer dumpautoload, 这样才能够辨认咱们增加的定名空间映照
另这里我额定商定了一个测试的定名空间, 不便对测试文件进行定名空间的目次辨认
travis 测试集成
假如筹算正在GitHub上托管包,一个没有错优点是集成Travis CI,这是一个继续集成使用顺序,它会主动运转单位测试文件. 当承受 pr 时,会十分有用,由于你能够疾速查看能否一切的测试都经过验证。
要与 Travis 集成,增加一个名为 .travis.yml 的文件,并复制如下内容
language: php
php:
– 7.0
– hhvm
before_script:
– composer self-update
– composer install –prefer-source –no-interaction –dev
script: phpunit复制代码正在这里,没有会深化探讨应用 Travis 的成绩,但这应该是一个很好的开端,你能够本人来进行钻研若何应用它.
编写代码
如今能够编写代码了, 关上 src 目次创立 File.php 文件, 复制以下代码
class File{ public function extension($filename) { return pathinfo($filename, PATHINFO_EXTENSION);
}
}复制代码假如你已经查看过旧的 PHP 包源码,可能会发现一个 Duoli/UtilDemo 目次。PSR-4 再也不应用嵌套的目次构造,而是容许间接正在 src 目次下编写类
编写单位测试
如今咱们曾经编写了包源码,能够开端编写一些测试了。PHPUnit 需求一个名为 phpunit.xml 的文件来界说一些设置。正在根目次中创立一个新的phpunit.xml文件,并复制如下代码:
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Duoli Util Test Suite">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites></phpunit>复制代码假如没有相熟这个文件中意义,不必担忧,你无需存眷设置了哪些内容(以后来说), 这个文件只是界说一些设置以及文件应该若何主动加载的商定.
接上去,正在 tests 目次下,创立一个名为 StrTest.php的文件,并复制如下代码:
<?php namespace Duoli\UtilDemoTests;
use Duoli\UtilDemo\File;
use PHPUnit\Framework\TestCase;
class FileTest extends TestCase
{
public function testExtension()
{
$extension = File::extension('readme.md');
$this->assertEquals('md', $extension);
}
}复制代码关上饬令行并运转:
$ ./vendor/bin/phpunit复制代码
PHPUnit 会主动运转测试,并给出一个绿色的 OK (1 test, 1 assertion) 输入。
正在编写测试文件时,需求确保测试类承继了 PHPUnit\Framework\TestCase
文档
最初要做的是创立一个 Readme.md 的文档。假如筹算正在 GitHub上托管代码,这个文件会正在代码页面显示进去,目的是形容包和包若何工作.
还应该正在源代码中蕴含一个答应证。默许状况下,你公布的任何货色都是你的版权一切,假如你想让其余人应用你的代码,你需求给它一个答应。一个好的抉择是 MIT 答应
公布到 github 以及 Packagist
如今曾经实现了你的包,你能够将它推到 GitHub 以及 Packagist。
GitHub 是一个托管的 git 存储库效劳,它使患上正在软件合作变患上十分容易。
Packagist 是查找以及应用 PHP 包的效劳商
要将代码推送到 GitHub,创立一个新的存储库, 而后设定 git 的远端, 将代码推下来便可, 饬令是
$ git remote add origin git@github.com:username/demo.git $ git push -u origin master 复制代码
正在 Github 上集成 Packagist 以及 Travis, 需求找到设置, 而且正在 Webhooks & Services 局部找到这两个效劳, 集成这两个效劳需求受权 github 账户而且设置一些简略的步骤.
归纳综合
假如之前从未开发过已公布的 php 包,那末需求思考不少成绩。但是,一旦你操作过没有止一次就没有至于这么复杂了.
PHP 的包构造十分简略,而 PSR-4 使其愈加简略。一旦理解了该构造的每一一局部是用于做甚么,其余人浏览 PHP包就会容易不少.
参考文章
- How to create a PSR-4 PHP package
相干学习保举:php编程(视频)
以上就是创立 PSR-4 的 Php 包的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 PSR-4
抱歉,评论功能暂时关闭!