【相干学习保举: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
抱歉,评论功能暂时关闭!