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

в 21:11, , рубрики: php, REPL, Веб-разработка, метки:

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 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

Источник

Поделиться

* - обязательные к заполнению поля