В PHP встроен REPL, который позволяет быстро поэкспериментировать с языком.
php -a
Interactive shell
# Некоторые используют его как калькулятор
php > echo 3 ** 2;
9
# Можно вызывать любые функции и смотреть что получится
php > echo array_sum([1, 3, 2]);
6
php >
Для разработчиков, которые никогда не имели с ним дело, может показаться что REPL это игрушка, но это не так. Во многих языках программисты значительное время проводят в REPL, постоянно исследуя код. В мире Lisp-подобных языков даже есть понятие REPL-driven development.
Сейчас ситуация в PHP стала меняться. В первую очередь благодаря PsySH. Это тоже REPL для PHP, но в отличие от встроенного, он значительно мощнее и ориентирован на удобство отладки и исследования (интроспекции) кода. Одна из приятных особенностей этого REPL, в том, что не нужно ставить точку с запятой в конце выражений и результат любого выражения автоматически выводится на экран. А еще цветной вывод.
Psy Shell v0.10.0 (PHP 7.3.11 — cli) by Justin Hileman
>>> 3 ** 2
=> 9
>>> array_sum([1, 3, 2])
=> 6
PsySH умеет конфигурироваться, что позволяет при его старте прогружать в память любой код на PHP. Благодаря этому, разработчики Laravel смогли создать REPL, который позволяет экспериментировать не только с обычными функциями, но и со всем фреймворком. Этот REPL называется Tinker. Начиная с текущего момента и на протяжении всего курса, мы постоянно будем использовать Tinker для проверки работы любых аспектов фреймворка.
Запускается Tinker как команда Artisan:
php artisan tinker
Psy Shell v0.10.0 (PHP 7.3.11 — cli) by Justin Hileman
>>> array_reverse([1, 2, 3, 4]);
=> [
4,
3,
2,
1,
]
Из приветствия видно, что мы имеем дело с PsySH. Здесь можно работать как с самим PHP, так и с Laravel. В последний включено множество функций, не имеющих прямого отношения к вебу, но упрощающих работу:
>>> Str::ascii('трансляция в аски')
=> "translyatsiya v aski"
>>> last([3, 2, 8])
=> 8
Tinker и PsySH добавляют несколько полезных функций от себя. Эти функции позволяют посмотреть историю команд, документацию по функциям, увидеть их содержимое и многое другое. Ниже несколько примеров:
>>> show last # посмотреть определение функции
> 726| function last($array)
727| {
728| return end($array);
729| }
>>> history # история
75: Str::ascii('трансляция в аски')
76: last([3, 2, 8])
77: show last
>>> dd([1, 2, [3, 2, ['show', ['one' => 'two']]]]) # вывести красиво данные
array:3 [
0 => 1
1 => 2
2 => array:3 [
0 => 3
1 => 2
2 => array:2 [
0 => "show"
1 => array:1 [
"one" => "two"
]
]
]
]
>>> doc head # посмотреть документацию по функции
function head($array)
Description:
Get the first element of an array. Useful for method chaining.
Param:
array $array
Return:
mixed
Самое интересное при работе с Tinker начнется позже, когда мы познакомимся с ORM и тестами.
Самостоятельная работа
- Поэкспериментируйте в tinker с функциями описанными в статье
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.