REPL je zkratka pro Read-Eval-Print Loop, neboli smyčka čtení, vykonávání a výstupu. V Pythonu je možné REPL aktivovat jednoduše příkazem python
či v NodeJS node
. V PHP existuje jen interaktivní mód, který lze zapnout php -a
, a tomu chybí P (print). Od toho je zde balíček PsySH.
Samozřejmě na jednoduché příkazy jako 5+8
asi nikdo nepoužije knihovnu. Ale co třeba si vyzkoušet složitější funkce. A co DI (dependency injection)? Ano, i to vše lze po integraci do Nette využívat. Stačí si knihovnu nainstalovat, integrovat pomocí kódu níže a používat.
Nic není lepší, než ukázka
A pro tentokrát jsem připravil ukázku přímo s videem. Ve videu jsou příklady, co lze s PsySH vyzkoušet. A poté i co lze dělat při integraci do Nette.
Instalace PsySH a integrace do Nette
Do kořenového adresáře stačí stáhnout soubor a pojmenovat jej psysh.phar, nebo nainstalovat přes composer. Následující kód počítá s PHAR souborem. Dále je nutné vytvořit soubor runPsysh.php s obsahem níže. A poté jen z příkazové řádky spustit pomocí php runPsysh.php
.
<?php use Psy\Configuration; use Psy\Shell;
// Includovat composer autoload jen v Nette 3.0 a výše require __DIR__ . '/vendor/autoload.php'; require 'psysh.phar'; /** * Resolve given FQCN from Nette DI * * @param string $type * @return mixed */ function resolve(string $type) { return App::resolve($type); } /** * Get data from config, use regular dot syntax as 'general.company.name' * * @param string $key * @return mixed */ function config(string $key) { return App::config($key); } class App { static $container; /** * Include autoloader and init Nette */ public static function init() {
// Nette 2.4
static::$container = require_once __DIR__ . '/app/bootstrap.php';
// Nette 3 a výše static::$container = \App\Bootstrap::boot()->createContainer(); } /** * Resolve given FQCN from Nette DI * * @param string $type * @return mixed */ static public function resolve(string $type) { return static::$container->getByType($type); } /** * Get data from config, use regular dot syntax as 'general.company.name' * * @param string $key * @return mixed */ static public function config(string $key) { $splittedKey = explode(".", $key); $current = static::$container->parameters; // Can work because of this: http://php.net/manual/en/language.references.arent.php foreach ($splittedKey as $keyPart) { if (isset($current[$keyPart])) { $current = &$current[$keyPart]; }else{ return null; } } return $current; } } App::init(); $config = new Configuration([ 'updateCheck' => 'never', 'prompt' => 'Kutac>>> ', ]); $shell = new Shell($config); $shell->run();
Znáte REPL knihovnu PsySH? Používáte ji třeba v Laravelu či jinde? Podělte se v komentářích
K tomuto článku již není možné přidávat další komentáře