93
PHP + Shell = Макс Волошин, PUG Dnepr #2

Макс Волошин: Php + shell = ♥

Embed Size (px)

DESCRIPTION

Доклад о работе в Shell, исполнении PHP в Shell, использовании REPL в PHP, а также эпический батл между Boris и PsySH. PHP User Group Ukraine в социальных сетях: https://www.facebook.com/pug.ukraine https://vk.com/pug.ukraine https://www.linkedin.com/groups/PHP-User-Group-Ukraine-6703717

Citation preview

Page 1: Макс Волошин: Php + shell = ♥

PHP + Shell = ♥

Макс Волошин, PUG Dnepr #2

Page 2: Макс Волошин: Php + shell = ♥

● работа в Shell● исполнение PHP в Shell● использование REPL● сравнение Boris и PsySH

О чём рассказ?

Page 3: Макс Волошин: Php + shell = ♥

Мы работаем с Shell когда● используем эмулятор терминала:

iTerm / Gnome Terminal / Konsole / xterm / ...● заходим по ssh на удалённую машину● используем PHP функции:

/ / / / ...● предоставляем интерфейс командной строки к

своему приложению● ...

Зачем нам это?

Page 4: Макс Волошин: Php + shell = ♥

Что такое Shell?

Shell – интерпретатор командного языка,который определяется стандартом POSIX

Page 5: Макс Волошин: Php + shell = ♥

Существуют различные реализации Shell● оригинальный Bourne Shell – sh – используется в

большинстве версий UNIX● Bourne Again Shell – bash – используется во многих

дистрибутивах Linux● Debian Almquist Shell – dash – используется в Debian● Z Shell – zsh – используется продвинутыми

пользователями командной строки :)● ...

Что такое Shell?

Page 6: Макс Волошин: Php + shell = ♥

Запуск PHP приложения из Shell

Page 7: Макс Волошин: Php + shell = ♥

В Shell можно использовать переменные

Shell переменные и окружение

Page 8: Макс Волошин: Php + shell = ♥

Узнать набор текущих переменных окружения

Переменные окружения

Page 9: Макс Волошин: Php + shell = ♥

Превратить простую переменную в переменную окружения

Переменные окружения

Page 10: Макс Волошин: Php + shell = ♥

Индивидуальные переменные для новой команды

Переменные окружения

Page 11: Макс Волошин: Php + shell = ♥

Передача параметров из Shell в PHP

Page 12: Макс Волошин: Php + shell = ♥

Использование переменных окружения

Page 13: Макс Волошин: Php + shell = ♥

Использование аргументов вызова

Page 14: Макс Волошин: Php + shell = ♥

Запуск приложения в POSIX стиле

Page 15: Макс Волошин: Php + shell = ♥

…(никто не имеет права исполнять файл)

…(владелец имеет право исполнить файл)

Запуск приложения в POSIX стиле

Page 16: Макс Волошин: Php + shell = ♥

Запуск приложения в POSIX стиле

Page 17: Макс Волошин: Php + shell = ♥

Запуск приложения в POSIX стиле

Page 18: Макс Волошин: Php + shell = ♥

Потоки ввода/вывода/ошибок

AppSTDIN

STDOUT

STDERR

Page 19: Макс Волошин: Php + shell = ♥

Работа с потоком вывода

Page 20: Макс Волошин: Php + shell = ♥

Работа с потоком ошибок

Page 21: Макс Волошин: Php + shell = ♥

Работа с потоком ошибок

Page 22: Макс Волошин: Php + shell = ♥

Работа с потоком ввода

Page 23: Макс Волошин: Php + shell = ♥

Работа с потоком ввода

Page 24: Макс Волошин: Php + shell = ♥

Работа с потоком ввода без блокировки

Page 25: Макс Волошин: Php + shell = ♥

Работа с потоком ввода без блокировки

Page 26: Макс Волошин: Php + shell = ♥

Композиция Shell программ

Page 27: Макс Волошин: Php + shell = ♥

Последовательное выполнение

Page 28: Макс Волошин: Php + shell = ♥

Успешность выполнения

Page 29: Макс Волошин: Php + shell = ♥

Условное выполнение

Page 30: Макс Волошин: Php + shell = ♥

Pipeline выполнение

Page 31: Макс Волошин: Php + shell = ♥

REPL – read-eval-print loop

Page 32: Макс Волошин: Php + shell = ♥

Чтобы быстро узнать результат одного или нескольких выражений● вы изучаете язык● вы вспоминаете язык● вы проверяете знание языка

Зачем нам это?

Page 33: Макс Волошин: Php + shell = ♥

Пример из жизни PHP разработчика

Page 34: Макс Волошин: Php + shell = ♥

– возможность исполнять код из аргумента без тегов:

– запуск в режиме интерактивной среды:

REPL в PHP

Page 35: Макс Волошин: Php + shell = ♥

Интерактивная среда не является REPL● результат вычисления не выводится● при ошибках процесс обрывается

Выход есть● Boris – tiny REPL for PHP ● PsySH – runtime developer console, interactive

debugger and REPL for PHP

REPL в PHP

Page 36: Макс Волошин: Php + shell = ♥

REPL в PHP

Page 37: Макс Волошин: Php + shell = ♥

Boris vs PsySH

Page 38: Макс Волошин: Php + shell = ♥

Boris PsySH

Первый коммит Nov 6, 2011 Apr 8, 2012

Звёзды на Github 1 470 + 420 +

Форки на Github 80 + 30 +

Загрузок на Packagist за месяц 230 000 + 2 000 +

Статистика

Page 39: Макс Волошин: Php + shell = ♥

Установка

Boris PsySH

Phar + +

Composer + +

Page 40: Макс Волошин: Php + shell = ♥

Boris vs PsySH

Работа в REPL

Page 41: Макс Волошин: Php + shell = ♥

Boris PsySH

Возможность не писать в конце

Page 42: Макс Волошин: Php + shell = ♥

Boris PsySH

Возможность не писать в конце

Page 43: Макс Волошин: Php + shell = ♥

Boris PsySH

Возможность не писать в конце

Page 44: Макс Волошин: Php + shell = ♥

Boris PsySH

Отображение встроенных типов

Page 45: Макс Волошин: Php + shell = ♥

Boris PsySH

Отображение встроенных типов

Page 46: Макс Волошин: Php + shell = ♥

Boris PsySH

Ограничение глубины вывода

Page 47: Макс Волошин: Php + shell = ♥

Boris PsySH

Ограничение глубины вывода

Page 48: Макс Волошин: Php + shell = ♥

Boris PsySH

Ограничение глубины вывода

Page 49: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка нефатальных ошибок

Page 50: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка нефатальных ошибок

Page 51: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка нефатальных ошибок

Page 52: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка нефатальных ошибок

Page 53: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка исключений

Page 54: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка исключений

Page 55: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка бесконечных циклов

Page 56: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка бесконечных циклов

Page 57: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка бесконечных циклов

Page 58: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка бесконечных циклов

Page 59: Макс Волошин: Php + shell = ♥

Boris PsySH

Обработка бесконечных циклов

Page 60: Макс Волошин: Php + shell = ♥

Boris vs PsySH

Внешняя конфигурация

Page 61: Макс Волошин: Php + shell = ♥

Boris PsySH

Файл конфигурации

Page 62: Макс Волошин: Php + shell = ♥

Boris PsySH

Файл конфигурации

Page 63: Макс Волошин: Php + shell = ♥

Boris PsySH

Файл конфигурации

Page 64: Макс Волошин: Php + shell = ♥

Boris PsySH

Подключение индивидуальных файлов

Page 65: Макс Волошин: Php + shell = ♥

Boris PsySH

Подключение индивидуальных файлов

Page 66: Макс Волошин: Php + shell = ♥

Boris vs PsySH

Интеграция со своим приложением

Page 67: Макс Волошин: Php + shell = ♥

Чтобы понизить порог входав разрабатываемую систему

Зачем нам это?

Page 68: Макс Волошин: Php + shell = ♥

● создание своей точки входа● использование своих переменных● написание своих обработчиков для значений

Какие возможности REPL нам нужны?

Page 69: Макс Волошин: Php + shell = ♥

Boris PsySH

Своя точка входа

Page 70: Макс Волошин: Php + shell = ♥

Boris PsySH

Своя точка входа

Page 71: Макс Волошин: Php + shell = ♥

Boris PsySH

Своя точка входа

Page 72: Макс Волошин: Php + shell = ♥

Boris PsySH

Свои переменные

Page 73: Макс Волошин: Php + shell = ♥

Boris PsySH

Свои переменные

Page 74: Макс Волошин: Php + shell = ♥

Boris PsySH

Свои переменные

Page 75: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 76: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 77: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Page 78: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 79: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 80: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris

Page 81: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris

Page 82: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 83: Макс Волошин: Php + shell = ♥

Свой обработчик значений

PsySH

Page 84: Макс Волошин: Php + shell = ♥

Свой обработчик значений

PsySH

Page 85: Макс Волошин: Php + shell = ♥

Свой обработчик значений

Boris PsySH

Page 86: Макс Волошин: Php + shell = ♥

Boris PsySH

Несколько обработчиков

Page 87: Макс Волошин: Php + shell = ♥

Boris PsySH

Несколько обработчиков

Page 88: Макс Волошин: Php + shell = ♥

Boris PsySH

принимает массив

Несколько обработчиков

Page 89: Макс Волошин: Php + shell = ♥

Рекурсивность обработчиков

Boris PsySH

Page 90: Макс Волошин: Php + shell = ♥

Рекурсивность обработчиков

Boris PsySH

Page 91: Макс Волошин: Php + shell = ♥

Рекурсивность обработчиков

Boris PsySH

Page 92: Макс Волошин: Php + shell = ♥

Итого

Boris : PsySH

… кроме этого в PsySH еще много всего хорошегоhttp://psysh.org/

Page 93: Макс Волошин: Php + shell = ♥

Спасибо! maxvoloshin.com