ScarShow

< IS >

NanoCLI - PHP CLI 開發工具 (2)

上次提到了NanoCLI的基本介紹,這邊延續上次的help指令實作以及標準輸入輸出的說明。

使用

實作指令 Help.php

接下來要實作上次提到的help指令,這邊要注意的是除了一開始的指令只要是以參數方式呼叫的指令都要加上Namespace這樣是要配合autoload的使用,記得help.php要放對資料夾位置。

<?php
// 設定namespace
namespace Test;

use NanoCLI\IO;

class Help extends NanoCLI\Command {
    public function __construct() {
        parent::__construct();
    }

    public function run() {
        IO::writeln("This is Command: help\n");
    }
}


上面時做了help指令而呼叫的方式如下,第一個是透過主要指令自動去呼叫的而第二個是直接去呼叫help指令。

php boot.php
This is Command: help

// 或者是

php boot.php help
This is Command: help

多層指令實作

在這邊要提到的是指令可以是多層的可以像是下面那樣去呼叫。

php boot.php commandA commandB commandC


如果要實作到上面的指令就必須要設定多層資料夾以及Namespace去配合像是下面那樣,它是可以一直循序下去的。

<?php
namespace Test;
class CommandA extends NanoCLI\Command { ... }

<?php
namespace Test\CommandA;
class CommandB extends NanoCLI\Command { ... }

<?php
namespace Test\CommandA\CommandB;
class CommandC extends NanoCLI\Command { ... }


檔案結構要設定成這樣配合autoload才會正常運作。

.
├── boot.php
├── Command
│   ├── Test
│   │   ├── CommandA
│   │   │   ├── CommandB
│   │   │   │   └── CommandC.php
│   │   │   └── CommandB.php
│   │   └── CommandA.php
│   └── Test.php
└── NanoCLI
    ├── Command.php
    ├── IO.php
    └── Loader.php

標準輸入輸出

這邊要說的是在標準輸入輸出,在上面的範例程式有使用到 NanoCLI\IO 這個Class,它已經把一些基本的工具都包裝好了。

像是讀取鍵盤的輸入可以使用 NanoCLI\IO::read() ,它會返回鍵盤在按下Enter前所輸入的資料。

<?php
$input = NanoCLI\IO::read();


如果要輸出文字到Console可以使用 NanoCLI\IO::write() 或是 NanoCLI\IO::writeln() ,這兩個函式在輸出文字的時候可以設定文字顏色。

<?php
NanoCLI\IO::writeln('I am Yellow', 'yellow');
NanoCLI\IO::writeln('I am Red', 'red');


如果想要知道terminal的大小,可以透過 NanoCLI\IO::width()NanoCLI\IO::height() 去取得。

<?php
use NanoCLI\IO;

$size = IO::width() . ' x ' . IO::height();
IO::writeln($size); // 80 x 24

總結

到這邊基本上已經結束了NanoCLI的基本說明,要寫個PHP CLI不是難事基本上NanoCLI幫你自動處理了,更進階的應用之後再說明,像是指令選項或是指令參數的使用方式。