krypt0nn / consoleargs
PHP 库,添加一些类以实现自己的命令行管理器
2.1.2
2021-06-04 21:04 UTC
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2024-09-05 03:51:49 UTC
README
ConsoleArgs - 用于实现 PHP 7.4 命令行参数处理的库
安装
composer require krypt0nn/consoleargs
工作示例
<?php namespace ConsoleArgs; (new Manager ([ new Command ('hello', function () { echo 'Hello, World!'; }) ]))->execute (array_slice ($argv, 1)); // array_slice нужен чтобы отрезать аргумент вызова файла из консоли
php index.php hello
输出
Hello, World!
处理参数
要获取传递给命令的参数列表,您可以在命令中添加匿名函数参数
<?php namespace ConsoleArgs; (new Manager ([ new Command ('write', function ($args) { echo implode (' ', $args); }) ]))->execute (array_slice ($argv, 1));
php index.php write kek lol arbidol
输出
kek lol arbidol
处理参数
参数功能提供 Param 对象,标志提供 Flag 对象
<?php namespace ConsoleArgs; (new Manager ([ (new Command ('write', function ($args, $params) { // Если было указано несколько одинаковых параметров, то будет указан список всех введённых значений // Поэтому это так же нужно предусмотреть: if (is_array ($params['--glue'])) $params['--glue'] = $params['--glue'][0]; echo $params['--base64'] ? base64_encode (implode ($params['--glue'], $args)) : implode ($params['--glue'], $args); }))->addParams ([ // Первый аргумент - название параметра // Второй аргумент (не обязательный) - значение по умолчанию // Третий аргумент (не обязательный) - обязательно ли нужно использовать данный параметр new Param ('--glue', ' '), // Аргумент - название флага // "-b64" - алиас флага (альтернативное название) (new Flag ('--base64'))->addAlias ('-b64') ]) ], new DefaultCommand (function ($args) { echo 'Command "'. $args[0] .'" not founded. You should write correct command name'; })))->execute (array_slice ($argv, 1));
php index.php write kek lol arbidol
输出
(исключение, т.к. не был использован параметр --glue)
php index.php write kek lol arbidol --glue ", "
输出
kek, lol, arbidol
php index.php write kek lol arbidol --glue ", " --base64
输出
a2VrLCBsb2wsIGFyYmlkb2w=
命令分支
在命令的匿名函数中,您可以创建具有新命令的新命令管理器。这样,您可以创建用于...命令...等等...
<?php namespace ConsoleArgs; (new Manager ([ (new Command ('test', function ($args) { (new Manager ([ new Command ('1', function () { echo 'Enfesto Studio'. PHP_EOL; }), new Command ('2', function () { echo 'Every Software'. PHP_EOL; }) ]))->execute ($args); }))->addAlias ('alias_test') ]))->execute (array_slice ($argv, 1));
php index.php test 1
输出
Enfesto Studio
php index.php alias_test 2
输出
Every Software
帮助命令
<?php namespace ConsoleArgs; $manager = new Manager ([ (new Command ('write', function ($args, $params) { if (is_array ($params['--glue'])) $params['--glue'] = $params['--glue'][0]; echo implode ($params['--glue'], $args); })) ->setDescription ('Output entered message') ->addParams ([ (new Param ('--glue', ' '))->addAlias ('-g') ]) ]); $manager ->addCommand (new HelpCommand ($manager)) ->execute (array_slice ($argv, 1));
php index.php help
输出
write — Output entered message
Not required:
--glue " " (-g)
本地化
负责本地化的对象是 Locale。详细信息请参阅类内容
作者:[Подвирный Никита](https://vk.com/technomindlp) 为 [Enfesto Studio Group](https://vk.com/hphp_convertation) 特别编写。