Написать пост

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

Аватар Тарас Сереванн

Мы решили рассказать о том, как написать аналог библиотеки «Python Fire» от Google для PHP и других языков программирования. Оказалось, что PHP Fire просто

Обложка поста Как превратить любой 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.

Следите за новыми постами
Следите за новыми постами по любимым темам
4К открытий4К показов