Как стать автором
Обновить

Boris — небольшой, но надежный REPL для php

Время на прочтение 2 мин
Количество просмотров 9.9K
REPL есть у python, ruby, clojure. REPL — read-eval-print loop. Если описать на псевдокоде что такое REPL — это будет выглядеть как-то так:
while(true){
    echo eval($input->get());
}

Подобная реализация позволяет разработчику эксперементировать с кодом как ему вздумается без создания файлов. Вы можете совершить ошибку, Boris выдаст сообщение об этом, но продолжит работать ожидая новый код.

image

Требования


  • PHP >= 5.3
  • The Readline functions
  • The PCNTL functions
  • The POSIX functions

Установка


Boris доступен через composer:
composer require d11wtq/boris dev-master

Или же по старинке:
git clone git://github.com/d11wtq/boris.git
cd boris
./bin/boris


Использование


При старте Boris появляется приглашение:
boris>

Попробуйте что-то написать, Boris это обработает и выдаст результат. Если у вас длинное многострочное выражение, Boris соберет его вместе и выполнит вместе. Для отмены любых операций используется ctrl + c. По умолчанию все результаты выдаются функцией var_dump
boris> $x = 1;
int(1)
boris> $y = 2;
int(2)
boris> "x + y = " . ($x + $y);
string(9) "x + y = 3"
boris> exit;

Для выхода из утилиты используется ctrl + D.

Использование в проектах



Все очень просто:
require_once 'lib/autoload.php';

$boris = new \Boris\Boris('myapp> ');
$boris->setLocal(array('appContext' => $appContext));
$boris->start();

Здесь инициализируется утилита с глобальной переменной appContext, доступной из Boris.

Есть возможность добавить колбэки перед стартом утилиты. Существует два варианта их добавления:
$boris->onStart('$foo = 42; $bar = 2; echo "Hello Boris!\n";');

$boris->onStart(function($worker, $scope){
  extract($scope);
  echo '$foo * $bar = ' . ($foo * $bar) . "\n";
  $worker->setLocal('name', 'Chris');
});

Сначала мы передаем строку кода, которую Boris просто исполнит через eval. Затем исполним callback, который экспортирует в себя данные из области видимости Boris, произведет с ними некоторые действия, а затем добавит переменную $name в Boris.

Ссылка на репозиторий.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Полезная штука?
37.33% Да 215
13.02% Нет 75
49.65% Я так и не понял зачем это вообще нужно 286
Проголосовали 576 пользователей. Воздержались 117 пользователей.
Теги:
Хабы:
+23
Комментарии 12
Комментарии Комментарии 12

Публикации

Истории

Работа

PHP программист
175 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн