我通常在 Python 中使用 argparse 模块来检测选项/参数、打印使用等。我试图在 PHP 中从本机代码或使用一些轻量级库/框架获得相同的结果,而无需编写大量的换行。
根据我的研究,我刚刚发现getop() 的原生 PHP 实现,它与getop() 的 C 实现非常相似,并且作为某些用途的框架非常有限(独占选项、前缀选项、参数冲突处理程序、选择,元变量等)。我想找到一种简单的方法来在 PHP 中获得相同的结果,而无需使用 raw argv
、重新发明轮子或实现“另一个改进的 getop() 库”来解析参数。
这是argparse
示例在 Python 中的外观:
from argparse import ArgumentParser, ONE_OR_MORE, ArgumentDefaultsHelpFormatter
__version__ = '3.14'
description = 'some description'
parser = ArgumentParser(
prog = 'someprogram',
description = description,
epilog = None,
parents = [],
formatter_class = ArgumentDefaultsHelpFormatter,
prefix_chars = '-',
fromfile_prefix_chars = None,
argument_default = None,
conflict_handler = 'error',
add_help = True,
)
parser.add_argument('-o', '--output',
action = 'store',
metavar = '/path/to/output',
dest = 'output',
choices = None,
help = 'Set the output directory')
parser.add_argument('-q', '--quiet',
action = 'store_true',
dest = 'quiet',
default = False,
help = 'Don\'t print status messages to stdout')
parser.add_argument(option_strings = ['FILES'],
metavar = 'FILES',
nargs = ONE_OR_MORE,
type=str,
dest = 'FILES',
help = 'One or more files to process')
parser.add_argument('-v', '--version',
action ='version',
version ='%(prog)s {version}'.format(version = __version__),
help = 'Shows the program version')
args = parser.parse_args()
在 PHP 中,您可以转换相同的行为,但您需要很多行来完全模拟 Python 之类的参数解析器。
PS:请不要把这个问题当作python vs php,我可能是相同的ruby vs php、java vs php或其他。它只是关于如何使用本机库以另一种不同的语言很好地和高效地移植代码。