Ответ 1
Это будет работать:
php -r 'include "MyClass.php"; MyClass::foo();'
Но я не вижу никаких причин для этого, кроме тестирования.
В основном у меня есть класс PHP, который я хочу протестировать из командной строки и запустить определенный метод. Я уверен, что это основной вопрос, но я кое-что пропускаю из документов. Я знаю, как запустить файл, очевидно php -f
, но не уверен, как запустить этот файл, который является классом, и выполнить данный метод
Это будет работать:
php -r 'include "MyClass.php"; MyClass::foo();'
Но я не вижу никаких причин для этого, кроме тестирования.
Я бы, вероятно, использовал call_user_func, чтобы избежать классов кодирования или имен методов. Ввод, вероятно, должен использовать некоторые настройки проверки, хотя...
<?php
class MyClass
{
public function Sum($a, $b)
{
$sum = $a+$b;
echo "Sum($a, $b) = $sum";
}
}
// position [0] is the script 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
Как уже упоминалось в Pekka, вам нужно написать script, который обрабатывает выполнение конкретного метода, а затем запускает его из вашей командной строки.
test.php:
<?php
class MyClass
{
public function hello()
{
return "world";
}
}
$obj = new MyClass();
echo $obj->hello();
?>
И в вашей командной строке
php -f test.php
Здесь приведен пример примера Repox. Это вызовет только метод, вызванный из командной строки.
<?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();
}
?>