net_bazzline/php_component_cli_arguments

免费(在自由的意义上)的php命令行参数薄封装,简化使用和验证过程

2.1.0 2022-11-23 20:48 UTC

This package is auto-updated.

Last update: 2024-09-24 13:33:15 UTC


README

本项目旨在提供一款易于使用且免费(在自由的意义上)的PHP命令行组件。

当前master分支的构建状态由Travis CI跟踪: 构建状态 最新稳定版

scrutinizer状态如下: 代码质量 | 构建状态

versioneye状态如下: 依赖状态

请访问openhub.net

当前变更日志可以在这里找到。

安装

手动安装

mkdir -p vendor/net_bazzline/php_component_cli_arguments
cd vendor/net_bazzline/php_component_cli_arguments
git clone https://github.com/bazzline/php_component_cli_arguments .

通过Packagist

composer require net_bazzline/php_component_cli_arguments:dev-master

优势

  • 简化以下类型参数的处理
    • 标志(命令 -f|--force)
    • 列表(命令 --foobar=foo | 命令 -f=foo)
    • 值(命令 )

示例

通过以下示例中所示的众多参数调用run.php

php run.php --foo bar --foobar=foo --foobar="bar" -f="foo" -f=bar -b foobar foo -flag

生成以下输出。

arguments provided:
    --foo
    bar
    --foobar=foo
    --foobar=bar
    -f=foo
    -f=bar
    -b
    foobar
    foo
    -flag
flags provided:
    foo
    b
    f
    l
    a
    g
lists provided:
    foobar
        foo
        bar
    f
        foo
        bar
values provided:
    bar
    foobar
    foo

术语

所有参数都分为三种类型之一:标志、列表或值。 参数参数?我无法找到主要区别。当我想到参数时,我的思维就会滑到方法或函数的领域,这就是我决定称它们为参数的原因。此外,php.net也将“参数列表”称为参数。

标志

标志是一种可以改变命令行为的参数。它作为触发器,您可以打开或关闭某些功能(世界上最好的例子是“-h|--help”)

标志在命令调用中的位置不重要,只看是否存在。

有效的标志有

  • -f
  • --flag
  • -flag(-f -l -a -g的快捷方式)

列表

列表是一个包含每个名称多个值的参数。

这次调用

php example.php --my_list="argument one" --my_list="argument two"

将生成一个名为 "my_list" 的列表和两个参数,"参数一" 和 "参数二"。

列表是最复杂的参数。就像标志一样,列表在命令调用中的位置不重要。

有效的列表有

  • -l=value
  • -l="val ue"
  • --list=value
  • --list="val ue"

值是直接的参数。你只需将它们传递给你的命令。与标志或列表不同,位置很重要。

有效的值有

  • value
  • "val ue"
php example.php "value one" "value two"

第一个值的内容是 "value one",第二个值的内容是 "value two"。

php example.php "value two" "value one"

第一个值的内容是 "value two",第二个值的内容是 "value one"。

短名称和长名称表示法

支持短名称("-f")和长名称("--foo")表示法的标志和列表参数。短名称由单个"-"表示,而长名称由双"-"表示。它们的使用和处理是领域特定的(也是一项主观问题)。合并列表的使用和内容不是本组件的一部分。

为什么没有验证?

验证是一个复杂的话题。这就是我决定不将其放入此组件领域的原因。
它会使代码本身复杂化。我会创建一个通用的验证接口,这会使使用此组件的速度减慢。此外,您将不得不学习一种验证表达式语言,或者需要编写适合我的验证接口但不符合您“编码方式”的代码。

最后,验证到底是什么?

  • 检查是否传递了参数(标志、列表、值)
  • 如果是传递的,则验证值或如果在此情况下允许(例如,同时传递标志"-f"和"-b"是否正确使用等)
  • 如果没有传递但必需,则创建特定的消息或抛出异常(对于可选参数也是如此)

总之,验证本身和错误处理是领域特定的。这就是为什么我决定不支持它深入。该组件通过"hasLists()"、"hasList($name)"等方法支持您的验证实现。

由于我不会说“永不言弃”,如果您有一个聪明的想法或方法来简化验证,我欢迎提问或拉取请求。

关于可选参数怎么办?

可选参数与验证有相同的问题。用优雅的方式实现并不容易。它是非常特殊/领域特定的(例如,如果使用标志"--xyz",则参数是可选的,否则是必需的)。您的代码无论如何都需要注意参数是否传递。使用可用的"has..."方法应该是足够的,并且足够通用。

API

API 可在 bazzline.net 上找到。

其他优秀的组件

结束语

如果您喜欢,请给它星标 :-). 如果需要,请添加问题。如果您喜欢,请拉取补丁。如果您使用它,请写一篇博客 :-D。