久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      創(chuàng)建 PSR-4 的 Php 包

      創(chuàng)建 PSR-4 的 Php 包

      【相關(guān)學(xué)習(xí)推薦:php圖文教程

      本文是幫助初學(xué)者搭建基礎(chǔ)的 php composer 包, 本項(xiàng)目源碼地址

      • github
      • packagist

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

      首先創(chuàng)建一個(gè)目錄來存放所有文件, 這里我 命名為 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, 如果沒有安裝, 請(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ù)制代碼

      輸入作者名稱, n 跳過

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

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

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

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

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

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

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

      require

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

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

      require-dev

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

      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í)候, 直接回車, 確認(rèn)安裝包依賴, 初始化完成

      {     "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ù)制代碼

      作為包管理來講, 我們需要忽略 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

      這里是上邊初始化沒有提及到的, 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è)試都通過驗(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 的問題,但這應(yīng)該是一個(gè)很好的開始,你可以自己來進(jìn)行研究如何使用它.

      編寫代碼

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

      class File{    public function extension($filename)    {        return pathinfo($filename, PATHINFO_EXTENSION);     }  }復(fù)制代碼

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

      編寫單元測(cè)試

      現(xiàn)在我們已經(jīng)編寫了包源碼,可以開始編寫一些測(cè)試了。PHPUnit 需要一個(gè)名為 phpunit.xml 的文件來定義一些設(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)心,你無需關(guān)注設(shè)置了哪些內(nèi)容(當(dāng)前來講), 這個(gè)文件只是定義一些設(shè)置和文件應(yīng)該如何自動(dòng)加載的約定.

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

      <?php namespace DuoliUtilDemoTests;  use DuoliUtilDemoFile; use PHPUnitFrameworkTestCase;  class FileTest extends TestCase {      public function testExtension()     {         $extension = File::extension('readme.md');         $this->assertEquals('md', $extension);     }  }復(fù)制代碼

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

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

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

      在編寫測(cè)試文件時(shí),需要確保測(cè)試類繼承了 PHPUnitFrameworkTestCase

      文檔

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

      還應(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 賬戶并且設(shè)置一些簡(jiǎn)單的步驟.

      概括

      如果以前從未開發(fā)過已發(fā)布的 php 包,那么需要考慮很多問題。然而,一旦你操作過不止一次就不至于這么復(fù)雜了.

      PHP 的包結(jié)構(gòu)非常簡(jiǎn)單,而 PSR-4 使其更加簡(jiǎn)單。一旦了解了該結(jié)構(gòu)的每一部分是用于做什么,其他人閱讀 PHP包就會(huì)容易很多.

      參考文章

      • How to create a PSR-4 PHP package

      相關(guān)學(xué)習(xí)推薦:php編程(視頻)

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)