NanoCLI - PHP CLI 開發工具 (1)
關於NanoCLI這個工具原本想都沒有想過要去製作它,它是伴隨著Pointless一起誕生出來的,除了NanoCLI之外還有一個CSS Compressor這個小工具但這邊先不說。
約一年前,那時候為了想要讓Pointless看起來像是使用內建指令那樣去操作,所以就另外製作了NanoCLI讓Pointless能順利實作各種CLI的指令,到現在NanoCLI只有少少的3個檔案而且總程式不超過250行,使用上也很簡單。
系統要求
PHP 5.3+
功能
- 指令呼叫 (ex.
$ ./cli.php command
) - 指令選項 (ex.
$ ./cli.php command -v -al
) - 指令配置 (ex.
$ ./cli.php command --prefix=/usr/local/bin
) - 文字色彩
- 文字界面讀寫
- Namespace 以及 Autoload
使用
下載原始碼
git clone git://github.com/scarwu/NanoCLI.git
檔案配置
.
├── boot.php
├── Command
│ ├── Test
│ │ ├── Help.php
│ │ └── Read.php
│ └── Test.php
└── NanoCLI
├── Command.php
├── IO.php
└── Loader.php
設定Boot
做為一個CLI應用程式首先要設定程式的進入點。
<?php
/* Boot.php */
// 載入 Loader
require realpath(__DIR__ . '/../src/NanoCLI/Loader.php');
use NanoCLI\Loader;
// 設定程式目錄以及Namespace
// 先設定NanoCLI的位置
Loader::register('NanoCLI', realpath(__DIR__ . '/../src'));
// 再設定相關指令的位置
Loader::register('Test', realpath(__DIR__ . '/Command'));
// 註冊autoload function
spl_autoload_register('NanoCLI\Loader::load');
// 初始化指令
$test = new Test();
$test->Init();
實作指令 Test.php
上面的程式碼最後初始化了Test這個Class,再初始化之後NanoCLI會自動呼叫對應指令,所以在這邊我們顯來實作第一個指令。
<?php
use NanoCLI\IO;
// 繼承 NanoCLI\Command
class Test extends NanoCLI\Command {
public function __construct() {
// 呼叫Parent Construct
parent::__construct();
}
public function run() {
// 讀取鍵盤輸入
IO::write('Enter your name: ');
$name = IO::read();
// 輸出結果
IO::writeln('Hi, ' . $name, 'green');
}
}
每個指令都要繼承NanoCLI\Command
,然後記得要叫Parent Construct
,這樣程式才會動,所以現在可以執行第一個程式了,應該會有以下的結果。
php boot.php
Enter your name: Scar
Hi, Scar
雖然在呼叫的時候沒有帶入任何參數但它也是一個指令,它就像是一般程式的main一樣的作用,所以可以將上面範例程式的run()
改成自動呼叫help指令以防止使用者不知道要如何去使用你的程式。
<?php
use NanoCLI\IO;
// 繼承 NanoCLI\Command
class Test extends NanoCLI\Command {
public function __construct() {
// 呼叫Parent Construct
parent::__construct();
}
public function run() {
// 呼叫Help指令
$help = new Test\Help();
$help->run();
}
}
待續...