如何創(chuàng)建PSR-4的Php包-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何創(chuàng)建PSR-4的Php包,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、沂水網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、沂水網(wǎng)絡(luò)營(yíng)銷(xiāo)、沂水企業(yè)策劃、沂水品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供沂水建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

目錄結(jié)構(gòu)和初建準(zhǔn)備

首先創(chuàng)建一個(gè)目錄來(lái)存放所有文件, 這里我 命名為 util-demo , 目錄中需要包含兩個(gè)目錄 src/, tests/, 所有的代碼需要放置到 src/ 目錄, 所有的測(cè)試文件需要放置到 tests/ 目錄

初始化文件夾, 并使用 git 初始化項(xiàng)目, 便于進(jìn)行版本管理

$ mkdir util-demo
$ cd util-demo
$ git init復(fù)制代碼

初始化 composer

這里假定你已經(jīng)安裝了 composer, 如果沒(méi)有安裝, 請(qǐng)到 getcomposer.org/download/ 進(jìn)行安裝

初始化并輸入包名, 這里默認(rèn)使用 duoli/util-demo 包名

$ composer init

Welcome to the Composer config generator  
                                            
This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [duoli/util-demo]: 
復(fù)制代碼

輸入描述

Description []: first util package demo復(fù)制代碼

輸入作者名稱(chēng), n 跳過(guò)

Author [duoli <zhaody901@126.com>, n to skip]: 
復(fù)制代碼

設(shè)定包的穩(wěn)定版本, 默認(rèn)是 stable, 詳細(xì)查看 minimum-stability (root-only)

Minimum Stability []: 
復(fù)制代碼

安裝類(lèi)型 : Package Type, 默認(rèn)是 library

Package Type (e.g. library, project, metapackage, composer-plugin) []: 
復(fù)制代碼

License, 協(xié)議, 關(guān)于協(xié)議部分, 你可以選擇自己需要的協(xié)議, 阮老師這里有一個(gè)閱讀指南, 可以進(jìn)行參考 如何選擇開(kāi)源許可證?, 對(duì)于協(xié)議部分的寫(xiě)法可以參考 許可協(xié)議 license 這里

License []: 
復(fù)制代碼

require

設(shè)定三方依賴(lài), 表明當(dāng)前項(xiàng)目/包是否有依賴(lài)于其他包進(jìn)行開(kāi)發(fā), 這里選擇 no,

Define your dependencies.

# 生產(chǎn)依賴(lài)
Would you like to define your dependencies (require) interactively [yes]? 
復(fù)制代碼

require-dev

開(kāi)發(fā)依賴(lài), 這里我們加入 phpunit 作為單元測(cè)試依賴(lài)

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: 
復(fù)制代碼

當(dāng)不需要額外增加包的時(shí)候, 直接回車(chē), 確認(rèn)安裝包依賴(lài), 初始化完成

{
    "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` command to find out more!復(fù)制代碼

上邊初始化完成之后, 我們文件目錄應(yīng)該如下所示

.
├── composer.json
├── composer.lock
└── vendor復(fù)制代碼

作為包管理來(lái)講, 我們需要忽略 composer.lockvendor 文件夾, 因?yàn)樵陧?xiàng)目中使用此包的時(shí)候會(huì)進(jìn)行全局的安裝, 不提交是為了不產(chǎn)生冗余代碼.

我們加入 .gitignore 文件, 加入這兩個(gè)文件夾的忽略, 另外由于要生成 phpunit 測(cè)試文件, 我們還需要加入 .phpunit.* , 我這里還額外加入了 IDE 的忽略

.gitignore

# ide
.idea

# project
composer.lock
vendor/

# phpunit
.phpunit.*復(fù)制代碼

文件自動(dòng)加載 autoload

autoload

這里是上邊初始化沒(méi)有提及到的, autoload 指定了包的加載方式, Composer 可以自動(dòng)加載包內(nèi)文件, 但是你需要指定你的文件的加載方式, 這里我們使用的是 psr-4 標(biāo)準(zhǔn), 詳細(xì)的規(guī)范可以閱讀 PSR-4 自動(dòng)加載規(guī)范

這里需要在 composer.json 中追加

   ...    "autoload": {        "psr-4": {            "Duoli\\UtilDemo\\": "src",            "Duoli\\UtilDemoTests\\": "tests"
        }
    }
   ... 
復(fù)制代碼

因?yàn)檫@個(gè)加載是后續(xù)添加的, 想要識(shí)別需要我們手動(dòng)運(yùn)行下 composer dumpautoload, 這樣才可以識(shí)別我們添加的命名空間映射

另這里我額外約定了一個(gè)測(cè)試的命名空間, 方便對(duì)測(cè)試文件進(jìn)行命名空間的目錄識(shí)別

travis 測(cè)試集成

如果打算在GitHub上托管包,一個(gè)不錯(cuò)優(yōu)點(diǎn)是集成Travis CI,這是一個(gè)持續(xù)集成應(yīng)用程序,它會(huì)自動(dòng)運(yùn)行單元測(cè)試文件. 當(dāng)接受 pr 時(shí),會(huì)非常有用,因?yàn)槟憧梢钥焖俨榭词欠袼械臏y(cè)試都通過(guò)驗(yàn)證。

要與 Travis 集成,添加一個(gè)名為 .travis.yml 的文件,并復(fù)制以下內(nèi)容

language: php

php:
    – 7.0
    – hhvm

before_script:
    – composer self-update
    – composer install –prefer-source –no-interaction –dev

script: phpunit復(fù)制代碼

在這里,不會(huì)深入討論使用 Travis 的問(wèn)題,但這應(yīng)該是一個(gè)很好的開(kāi)始,你可以自己來(lái)進(jìn)行研究如何使用它.

編寫(xiě)代碼

現(xiàn)在可以編寫(xiě)代碼了, 打開(kāi) src 目錄創(chuàng)建 File.php 文件, 復(fù)制如下代碼

class File{    public function extension($filename)    {        return pathinfo($filename, PATHINFO_EXTENSION);
    }

}復(fù)制代碼

如果你曾經(jīng)查看過(guò)舊的 PHP 包源碼,可能會(huì)發(fā)現(xiàn)一個(gè) Duoli/UtilDemo 目錄。PSR-4 不再使用嵌套的目錄結(jié)構(gòu),而是允許直接在 src 目錄下編寫(xiě)類(lèi)

編寫(xiě)單元測(cè)試

現(xiàn)在我們已經(jīng)編寫(xiě)了包源碼,可以開(kāi)始編寫(xiě)一些測(cè)試了。PHPUnit 需要一個(gè)名為 phpunit.xml 的文件來(lái)定義一些設(shè)置。在根目錄中創(chuàng)建一個(gè)新的phpunit.xml文件,并復(fù)制以下代碼:

<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>復(fù)制代碼

如果不熟悉這個(gè)文件中意思,不用擔(dān)心,你無(wú)需關(guān)注設(shè)置了哪些內(nèi)容(當(dāng)前來(lái)講), 這個(gè)文件只是定義一些設(shè)置和文件應(yīng)該如何自動(dòng)加載的約定.

接下來(lái),在 tests 目錄下,創(chuàng)建一個(gè)名為 StrTest.php的文件,并復(fù)制以下代碼:

<?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);
    }

}復(fù)制代碼

打開(kāi)命令行并運(yùn)行:

$ ./vendor/bin/phpunit復(fù)制代碼

PHPUnit 會(huì)自動(dòng)運(yùn)行測(cè)試,并給出一個(gè)綠色的 OK (1 test, 1 assertion) 輸出。

在編寫(xiě)測(cè)試文件時(shí),需要確保測(cè)試類(lèi)繼承了 PHPUnit\Framework\TestCase

文檔

最后要做的是創(chuàng)建一個(gè) Readme.md 的文檔。如果打算在 GitHub上托管代碼,這個(gè)文件會(huì)在代碼頁(yè)面顯示出來(lái),目的是描述包以及包如何工作.

還應(yīng)該在源代碼中包含一個(gè)許可證。默認(rèn)情況下,你發(fā)布的任何東西都是你的版權(quán)所有,如果你想讓其他人使用你的代碼,你需要給它一個(gè)許可。一個(gè)好的選擇是 MIT 許可

發(fā)布到 github 和 Packagist

現(xiàn)在已經(jīng)完成了你的包,你可以將它推到 GitHub 和 Packagist。

GitHub 是一個(gè)托管的 git 存儲(chǔ)庫(kù)服務(wù),它使得在軟件協(xié)作變得非常容易。

Packagist 是查找和使用 PHP 包的服務(wù)商

要將代碼推送到 GitHub,創(chuàng)建一個(gè)新的存儲(chǔ)庫(kù), 然后設(shè)定 git 的遠(yuǎn)端, 將代碼推上去即可, 命令是

$ git remote add origin git@github.com:username/demo.git  
$ git push -u origin master  
復(fù)制代碼

在 Github 上集成 Packagist 和 Travis, 需要找到設(shè)置, 并且在  Webhooks & Services 部分找到這兩個(gè)服務(wù), 集成這兩個(gè)服務(wù)需要授權(quán) github 賬戶(hù)并且設(shè)置一些簡(jiǎn)單的步驟.

關(guān)于如何創(chuàng)建PSR-4的Php包就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

新聞名稱(chēng):如何創(chuàng)建PSR-4的Php包-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://muchs.cn/article2/degpic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化、面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)