【发布时间】:2012-09-11 00:43:34
【问题描述】:
我有一个包含许多不同参数化函数的脚本。是否可以从命令行调用这些函数中的任何一个并传入参数,而不必在脚本中对函数调用进行硬编码?
仅供参考:我确实知道如何从命令行执行一个简单的 PHP 脚本
不完全调用函数,记住 script.php 有大约 5 个不同的函数,我希望只调用 1 个,这可能吗
【问题讨论】:
标签: terminal command-line-arguments php
我有一个包含许多不同参数化函数的脚本。是否可以从命令行调用这些函数中的任何一个并传入参数,而不必在脚本中对函数调用进行硬编码?
仅供参考:我确实知道如何从命令行执行一个简单的 PHP 脚本
不完全调用函数,记住 script.php 有大约 5 个不同的函数,我希望只调用 1 个,这可能吗
【问题讨论】:
标签: terminal command-line-arguments php
不,您不能直接这样做。您有几个选择:
更新:
这里是使用第一个传递的参数作为函数调用的示例:
if(function_exists( $argv[1] ))
call_user_func_array($argv[1], $argv);
【讨论】:
php script.php arg1 arg2
在您的脚本中以 $argv[1]、$argv[2]...等方式访问它们。
【讨论】:
不是 100% 确定你在问什么,但执行会是这样的
php script.php arg1 arg2 arg3
你似乎已经知道了。在脚本本身中访问这些参数的方法是使用变量$argv,因此$argv[0] 将是脚本,$argv[1] 将是"arg1",等等。如果这不起作用,则使用@ 987654327@.
至于选项,可以用getopt解析
【讨论】:
您可以让命令行脚本使用它的第一个参数作为要调用的函数,然后将参数传递给它。参数将出现在魔法数组变量$argv中。
// Zero'th "argument" is just the name of your PHP script
$name_of_php_script = array_unshift($argv);
// Next argument will be your callback
$callback = array_unshift($argv);
// Remaining arguments are your parameters
call_user_func_array($callback, $argv);
显然,为了安全起见,您可能想让事情变得更复杂,或者传递某种特殊值,但这符合您在问题中描述的基本逻辑。
【讨论】:
您可以编写一个选项,然后将函数传递给该选项,例如 myscript.php -function my_function
然后在你的脚本中调用函数
$argv[1]()
【讨论】:
getopt() 接受 CLI 参数。
php /path/to/myscript.php -a foo -b bar -c baz
$arguments = getopt("a:b:c:");
print_r($arguments);
Array
(
[a] => foo
[b] => bar
[c] => baz
)
将其设为函数 $arguments[a](); 以调用 foo(); 如果您有函数 arg,也可以传入 b。
【讨论】: