5

我有一个脚本,它有一堆不同的参数化函数。是否可以从命令行调用这些函数中的任何一个并传入参数,而不必在脚本中对函数调用进行硬编码?

仅供参考:我确实知道如何从命令行执行一个简单的 PHP 脚本

不完全调用该函数,记住 script.php 有大约 5 个不同的函数,我只想调用 1 个,这可能吗

4

6 回答 6

9

不,你不能直接这样做。你有几个选择:

  • 将每个函数放在一个单独的 php 文件中并调用该 php 文件
  • 使用传递给 php 文件的第一个参数作为函数名,并编写几行代码来选择正确的函数。

更新:

这是使用第一个传递的参数作为函数调用的示例:

if(function_exists( $argv[1] ))
  call_user_func_array($argv[1], $argv);
于 2012-09-18T17:51:27.317 回答
3

php script.php arg1 arg2 在您的脚本中以 $argv[1]、$argv[2]...等方式访问它们。

于 2012-09-18T17:52:56.303 回答
0

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
    )

如果你有一个函数 arg,让它成为一个$arguments[a]();调用函数,你也可以传入 b。foo();

于 2012-09-18T17:51:39.210 回答
0

不是 100% 确定你在问什么,但执行会是这样的

php script.php arg1 arg2 arg3

你似乎已经知道了。在脚本本身中访问这些参数的方法是使用变量$argv$argv[0]脚本也是如此,$argv[1]将是"arg1"等。如果这不起作用,则使用$_SERVER['argv'].

至于选项,您可以使用getopt

于 2012-09-18T17:51:56.300 回答
0

您可以让命令行脚本使用它的第一个参数作为要调用的函数,然后将参数传递给它。参数将出现在魔法数组变量$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);

显然,为了安全起见,您可能想让事情变得更复杂,或者传递某种特殊值,但这符合您在问题中描述的基本逻辑。

于 2012-09-18T17:53:43.433 回答
0

您可以编写一个选项,然后将函数传递给该选项,例如 myscript.php -function my_function

然后在你的脚本中调用函数

$argv[1]()
于 2012-09-18T17:54:22.613 回答