В основном у меня есть класс 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'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
Ниже приведен пример примера кода 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(); } ?>
Как уже упоминал Пекка, вам нужно написать сценарий, который обрабатывает выполнение конкретного метода, а затем запускает его из командной строки.
test.php:
<?php class MyClass { public function hello() { return "world"; } } $obj = new MyClass(); echo $obj->hello(); ?>
И в вашей командной строке
php -f test.php