Intereting Posts
mysql_affected_rows () возвращает 0 для инструкции UPDATE, даже если обновление действительно происходит PHP-скрипт для заполнения таблиц MySQL Пользователь должен просмотреть страницу перед просмотром Неустранимая ошибка: вызов функции-функции-члена () на null Как декодировать escape-последовательности Unicode, такие как «\ u00ed», для правильных кодированных символов UTF-8? Создание базового тестового класса для PHPUnit и расширение его для общей функциональности приводит к ошибке, не найденной классом strtotime () & date () странное поведение при преобразовании даты в тот же формат, что и раньше Сравнить объект SimpleXml Как я могу получить шестнадцатеричный дамп строки в PHP? Проверьте, есть ли временная метка x часов? Войти на сайт с curl в vBulletin Добавить подтверждение оплаты в mysql после отправки формы динамические значения строк, неправильно обновленные в mysql php Объединение запроса AND / OR в Laravel Вопросы PHP и xPath

Как выполнить метод в классе из командной строки

В основном у меня есть класс 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