Как превратить любой PHP-код в консольное приложение: создаем аналог библиотеки Python Fire от Google

Как превратить любой PHP-код в консольное приложение: создаем аналог библиотеки Python Fire от Google

Вы наверняка слышали про open source библиотеку Python Fire, представленную Google 2 марта — она автоматически создаёт интерфейсы командной строки (CLI). Если вы до сих пор не слышали об этом, обязательно прочтите нашу новость, где мы объяснили принципы работы Python Fire и привели несколько примеров кода.

Сейчас давайте разберём то, как просто создать аналог этой библиотеки для PHP. Дело в том, что хоть разработка Google и была воспринята сообществом как инновация, создание её базового функционала является тривиальной задачей.

Реализация

Для создания «PHP Fire» нам понадобится функция eval из стандартной библиотеки и глобальная переменная $argv. Для тех, кто не знаком с ними мы приводим полезные ссылки на документацию:

В итоге наш код будет выглядеть очень просто:

eval($argv[1].';');

Примеры работы

Процедурный стиль

Содержимое file.php:

function sum($a, $b)
{
    echo $a + $b;
}

eval($argv[1].';');

Вызываем его из командной строки:

php file.php "sum(2, 3)"

В качестве ответа мы получим число 5.

Объектный стиль

Предположим, что в file.php описывается или импортируется какой-либо класс:

class Programmer
{
    public function write($code)
    {
        echo $code;
    }
}

eval($argv[1].';');

В такой ситуации консольный вызов будет иметь следующий вид:

php file.php "(new Programmer)->write('hello')"

Заключение

Таким образом, вместо установки и подключения библиотеки Python Fire от Google, вы можете добавить в конец файла одну единственную строчку и получить аналогичный результат.

Более того, этот способ доступен не только для PHP: функция eval присутствует и в других языках программирования, например, она есть в JavaScript.