【问题标题】:How to call a PHP function from CLI?如何从 CLI 调用 PHP 函数?
【发布时间】:2012-10-10 08:07:10
【问题描述】:

假设我在function.php 中有一个私有函数addUser(),它将$username 作为输入变量并执行一些操作:

function addUser($username) {

//do some stuff

}

现在我想调用这个函数并传递值 $username,如果可能的话,使用 PHP CLI。我想这在function.php 外部是不可用的,因为它是私有的,但是我怎么能这样做呢?

【问题讨论】:

  • 我不明白“由于它是私有的,因此无法从外部工作”。你能解释一下你的意思吗?基本上你的类方法或函数的可见性与运行 php 的上下文无关。

标签: function call command-line-interface php


【解决方案1】:
php -r 'include("/absolute/path/to/function.php"); addUser("some user");'

这应该可行。因为您基本上是在's 之间执行所有代码。您可以在其中包含function.php,并且应该适当地致电addUser()

phpdoc

【讨论】:

    【解决方案2】:

    您将命令行参数传入argv 数组:

    function addUser($username) {
    
    //do some stuff
    
    }
    
    addUser( $argv[1] );
    

    【讨论】:

    • 为什么是 -1 ?所以应该强制在-1时写评论。
    • @JvdBerg only argv -> $argv
    • @JvdBerg 您的个人资料最近只有几次反对票,这确实不是我们认为的滥用行为。如果这种情况继续存在,请告诉我们。
    • 我会考虑使用 PEAR Console_Commandline pear.php.net/package/Console_CommandLine :-) 但是普通的 $argv 确实有效。
    • @JvdBerg 感谢您的提示,我用php function.php john_doe 尝试过,但现在我收到一条错误消息,告诉我PHP Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION。似乎该函数无法处理字符串 john_doe,但这很奇怪。你知道为什么吗?
    【解决方案3】:

    您可以使用 $argv。 $argv[0] = 文件名,$argv[1] = 文件名之后的第一件事。

    即php function.php“一些参数” 将是 addUser("some arg");

    【讨论】:

      【解决方案4】:
      function funcb()
      {
          echo 'yes';
      }
      
      if (php_sapi_name() === 'cli') {
          if (count($argv) === 1) {
              echo 'See help command'.PHP_EOL;
              exit();
          }
      
          if (function_exists($argv[1])) {
              $func = $argv[1];
              array_shift($argv);
              array_shift($argv);
              $func(...$argv);
          }
      }
      

      这对我有用!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 2010-11-05
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多