Как выполнить метод в классе из командной строки - PullRequest
17 голосов
/ 11 февраля 2011

В основном у меня есть класс PHP, который я хочу протестировать из командной строки и запустить определенный метод. Я уверен, что это основной вопрос, но я что-то упустил из документов. Я знаю, как запустить файл, очевидно, php -f, но не уверен, как запустить этот файл, который является классом, и выполнить данный метод

Ответы [ 4 ]

36 голосов
/ 11 февраля 2011

Это будет работать:

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

Но я не вижу никаких причин для этого, кроме тестирования.

12 голосов
/ 11 февраля 2011

Я бы, вероятно, использовал 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
7 голосов
/ 11 февраля 2011

Вот более аккуратный пример кода 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();
}

?>
6 голосов
/ 11 февраля 2011

Как уже упоминал Пекка, вам нужно написать скрипт, который обрабатывает выполнение определенного метода, а затем запустить его из командной строки.

test.php:

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

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

Ив вашей командной строке

php -f test.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...