我有一个脚本,它有一堆不同的参数化函数。是否可以从命令行调用这些函数中的任何一个并传入参数,而不必在脚本中对函数调用进行硬编码?
仅供参考:我确实知道如何从命令行执行一个简单的 PHP 脚本
不完全调用该函数,记住 script.php 有大约 5 个不同的函数,我只想调用 1 个,这可能吗
我有一个脚本,它有一堆不同的参数化函数。是否可以从命令行调用这些函数中的任何一个并传入参数,而不必在脚本中对函数调用进行硬编码?
仅供参考:我确实知道如何从命令行执行一个简单的 PHP 脚本
不完全调用该函数,记住 script.php 有大约 5 个不同的函数,我只想调用 1 个,这可能吗
不,你不能直接这样做。你有几个选择:
更新:
这是使用第一个传递的参数作为函数调用的示例:
if(function_exists( $argv[1] ))
call_user_func_array($argv[1], $argv);
php script.php arg1 arg2
在您的脚本中以 $argv[1]、$argv[2]...等方式访问它们。
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();
不是 100% 确定你在问什么,但执行会是这样的
php script.php arg1 arg2 arg3
你似乎已经知道了。在脚本本身中访问这些参数的方法是使用变量$argv
,$argv[0]
脚本也是如此,$argv[1]
将是"arg1"
等。如果这不起作用,则使用$_SERVER['argv']
.
至于选项,您可以使用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]()