【问题标题】:Calling a function in a PHP script from the command line从命令行调用 PHP 脚本中的函数
【发布时间】:2012-09-11 00:43:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: terminal command-line-arguments php


    【解决方案1】:

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

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

    更新:

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

    if(function_exists( $argv[1] ))
      call_user_func_array($argv[1], $argv);
    

    【讨论】:

    • 因为它回答了问题。
    • @artragis 没有例子就没用了。
    • @wes 我认为 artragis 和您对这个问题的解释不同。这有点模棱两可,但我 认为 OP 想在命令行上指定函数名称本身。没有“必须在脚本中对函数调用进行硬编码”的内置方法。
    • 是的,它回答了。 @user1020069 想要调用一个特定的函数,该函数的名称在脚本中作为参数给出。您的 getopt 只是“解析”参数,并没有带来“每个函数使用一个文件,然后需要它并使用 $function();”的解决方案
    • @user1020069 所有这些答案的共同点是您将不得不修改脚本,并包含一些命令行参数解析以调用适当的函数。如果不编写额外的代码,就无法在本地执行此操作。
    【解决方案2】:

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

    【讨论】:

    • 不错,不知道这个。
    • 仅供参考,“argv”和“argc”是用于访问命令行参数的变量的传统名称,例如在 C 和 Perl 中。
    【解决方案3】:

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

    php script.php arg1 arg2 arg3
    

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

    至于选项,可以用getopt解析

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        $argv[1]()
        

        【讨论】:

          【解决方案6】:

          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。

          【讨论】:

          • 他想调用 script.php 中的特定函数,将 args 传递给它,而不仅仅是运行 script.php
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-15
          • 1970-01-01
          • 2015-04-14
          • 2012-05-03
          • 1970-01-01
          相关资源
          最近更新 更多