如何从命令行在类中执行方法

时间:2011-02-11 13:49:28

标签: php command-line

基本上我有一个PHP类,我想从命令行测试并运行某个方法。我确信这是一个基本问题,但我遗漏了文档中的内容。我知道如何运行文件,显然php -f但不知道如何运行该文件是一个类并执行给定的方法

4 个答案:

答案 0 :(得分:36)

这将有效:

php -r 'include "MyClass.php"; MyClass::foo();'

但是除了测试之外我没有看到任何理由。

答案 1 :(得分:12)

我可能会使用call_user_func来避免编码类或方法名称。 输入应该使用一些验证,但是......

<?php

class MyClass
{
    public function Sum($a, $b)
    {
        $sum = $a+$b;
        echo "Sum($a, $b) = $sum";
    }
}


// position [0] is the script's file name
array_shift(&$argv);
$className = array_shift(&$argv);
$funcName = array_shift(&$argv);

echo "Calling '$className::$funcName'...\n";

call_user_func_array(array($className, $funcName), $argv);

?>

结果:

E:\>php testClass.php MyClass Sum 2 3
Calling 'MyClass::Sum'...
Sum(2, 3) = 5

答案 2 :(得分:7)

这是Repox代码的一个更简洁的例子。这只会在从命令行调用时运行de方法。

<?php
class MyClass
{
  public function hello()
  {
    return "world";
  }
}

// Only run this when executed on the commandline
if (php_sapi_name() == 'cli') {
    $obj = new MyClass();
    echo $obj->hello();
}

?>

答案 3 :(得分:6)

正如Pekka已经提到的,您需要编写一个脚本来处理特定方法的执行,然后从命令行运行它。

test.php的:

<?php
class MyClass
{
  public function hello()
  {
    return "world";
  }
}

$obj = new MyClass();
echo $obj->hello();
?>

在命令行中

php -f test.php