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

  • Tutorial
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.

Ссылка на репозиторий.

Only registered users can participate in poll. Log in, please.

Полезная штука?

  • 37.3%Да215
  • 13.0%Нет75
  • 49.6%Я так и не понял зачем это вообще нужно286
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 12

    0
    Для онлайн тулзы (сервиса), это может быть удобно
      +6
      Так как я понимаю код не в сендбоксе, опасно тогда выставлять такое в онлайн тулзу.
        0
        В chroot можно завернуть.
      0
      у питона такая вещь в свое время очень помогала.
        +1
        После питона в PHP её действительно очень не хватает, потому было бы круто, если бы подобная утилита появилась в IDE, тогда не надо было бы скакать между окнами для пары мелких экспериментов.
        В PyCharm есть, а в PHPStorm нету:
        youtrack.jetbrains.com/issue/WI-12069
        +18
        В общем-то php -a, но Boris выглядит намного привлекательнее и функциональнее.
          +6
          php -a

          Так вот как он запускается :) // Всегда мучался забивая пару строчек в php и нажимая Ctrl-D для завершения вывода, а потом смотрел на stdout. Благо, всего пару раз так извращался.
          +2
          Как хорошо, что php развивается.
            –3
            Лишь за все результаты выдаются функцией var_dump готов придать php -a, надо будет только еще прикрутить историю команд сохраняющуюся между запусками php и поддержу многострочных команд типа как в консоли хромовской…
              +4
              php -a тоже уже не падает на ошибки, есть автодополнение и история; в boris фактически только вывод результата + более приятный вариант обработки SIGINT
                0
                Автор смотрел в сторону phpsh, которому сто лет в обед?
                  +1
                  удалено (Пост не читай, коменты оставляй)

                  Only users with full accounts can post comments. Log in, please.