REPL есть у python, ruby, clojure. REPL — read-eval-print loop. Если описать на псевдокоде что такое REPL — это будет выглядеть как-то так:
while(true){
echo eval($input->get());
}
Подобная реализация позволяет разработчику эксперементировать с кодом как ему вздумается без создания файлов. Вы можете совершить ошибку, Boris выдаст сообщение об этом, но продолжит работать ожидая новый код.
Требования
- 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 BorisBoris('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.
Автор: GusakovNick