站長資訊網
        最全最豐富的資訊網站

        創建 PSR-4 的 Php 包

        創建 PSR-4 的 Php 包

        【相關學習推薦: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 command 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` command to find out more!復制代碼

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

        . ├── composer.json ├── composer.lock └── vendor復制代碼

        作為包管理來講, 我們需要忽略 composer.lockvendor 文件夾, 因為在項目中使用此包的時候會進行全局的安裝, 不提交是為了不產生冗余代碼.

        我們加入 .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 DuoliUtilDemoTests;  use DuoliUtilDemoFile; use PHPUnitFrameworkTestCase;  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) 輸出。

        在編寫測試文件時,需要確保測試類繼承了 PHPUnitFrameworkTestCase

        文檔

        最后要做的是創建一個 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編程(視頻)

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 成人精品视频99在线观看免费 | 久久精品国产亚洲精品2020 | 最新国产精品拍自在线播放| 久久国产精品99久久久久久老狼| 亚洲乱码精品久久久久..| 国产精品成人无码久久久久久| 99久久精品国产麻豆| 欧美精品久久久久久久自慰| 四虎国产精品免费久久| 国产精品狼人久久久久影院| 国产精品久久久久久影院| 国产色婷婷五月精品综合在线| 在线亚洲欧美中文精品| 青青青青久久精品国产h久久精品五福影院1421 | 日韩精品亚洲人成在线观看| 日本精品少妇一区二区三区| 99久免费精品视频在线观看| 国产精品久久久久久久 | 婷婷国产成人精品视频| 亚洲国产欧美日韩精品一区二区三区 | 久久久久国产精品| 国产成人精品无码一区二区| 精品无码久久久久久尤物| 久久精品蜜芽亚洲国产AV| 青青草原精品国产亚洲av| 亚洲国产精品VA在线看黑人| 亚洲精品tv久久久久久久久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品无码免费播放| 国产精品99爱免费视频| 国产成人精品在线观看| 国产精品99久久不卡| 国产精品99无码一区二区| 国产va免费精品| 97精品国产自在现线免费观看 | 亚洲一区爱区精品无码| 亚洲日韩一页精品发布| 亚洲精品无码午夜福利中文字幕 | 欧美XXXX黑人又粗又长精品| 欧美精品区一级片免费播放 | 99国内精品久久久久久久|