Introduzione a PsySH
PsySH è una shell interattiva pensata per facilitare
il debug e l’esplorazione di codice PHP. Si tratta di uno strumento potente e versatile, ideale per sviluppatori che
vogliono testare snippet di codice in un ambiente sicuro e interattivo. È particolarmente utile in fase di sviluppo,
consentendo di eseguire comandi e ottenere risultati immediati.
Caratteristiche principali
- Esecuzione interattiva di codice PHP.
- Supporto per il caricamento di file e classi personalizzate.
- Funzioni di autocompletamento per variabili, metodi e classi.
- Integrazione con debug_backtrace e stack traces per una migliore diagnostica degli errori.
- Possibilità di esplorare il contesto delle applicazioni in runtime.
Installazione
PsySH è distribuito tramite Composer.
Puo essere installato localmente tra i vendor di un progetto php, ad esempio con il seguente comando:
composer require psy/psysh --dev
Oppure puo essere installato globalmente a livello di sistema con il comando:
composer global require psy/psysh
Una volta installato, PsySH può essere avviato eseguendo il comando:
vendor/bin/psysh
PsySH apre una shell interattiva, da utilizzare un po come la console degli strumenti di sviluppo del browser.
Psy Shell v0.12.4 (PHP 8.3.14 — cli) by Justin Hileman
?>
Esempio pratico
PsySH puo esere usata come la shell interattiva di php che si avvia con il comando php -a. Supponiamo di voler testare una funzione PHP per calcolare la somma di numeri. Apri PsySH e inserisci il seguente codice:
function somma($a, $b) {
return $a + $b;
}
somma(5, 7); // Output atteso: 12
Dopo aver premuto Invio, PsySH restituirà l’output della funzione, confermando il corretto funzionamento del codice.
Tuttavia notiamo che PsySH genera un output ad ogni istruzione inserita, infatti PsySH è un Read-Eval-Print Loop (o REPL).
Debug di un’applicazione
PsySH può essere utilizzato anche per esaminare variabili e oggetti durante l’esecuzione di un’applicazione. Per fare ciò, dopo avere importato il file autoload dei vendor, aggiungere il seguente comando nel codice dove inserire il “breackpoint” ed interrompere l’esecuzione per il debug:
eval(\Psy\sh());
Quando l’applicazione raggiunge questa riga, entrerà automaticamente nella shell interattiva, permettendoti di esplorare il contesto in tempo reale.
Il comando help ti darà la lista di comandi di PsySH e le loro spiegazioni:
>>> help
– help Show a list of commands. Type `help [foo]` for information about [foo]. Aliases: ?
– ls List local, instance or class variables, methods and constants. Aliases: list, dir
– dump Dump an object or primitive.
– doc Read the documentation for an object, class, constant, method or property. Aliases: rtfm, man
– show Show the code for an object, class, constant, method or property.
– wtf Show the backtrace of the most recent exception. Aliases: last-exception, wtf?
– trace Show the current call stack.
– buffer Show (or clear) the contents of the code input buffer. Aliases: buf
– clear Clear the Psy Shell screen.
– history Show the Psy Shell history.
– exit End the current session and return to caller. Aliases: quit, q
Il comando ls in PsySH
Il comando ls in PsySH elenca tutti gli elementi disponibili nel contesto corrente, inclusi:
- Variabili: Mostra tutte le variabili attualmente definite.
- Classi: Elenca tutte le classi dichiarate, comprese quelle caricate tramite autoload.
- Metodi: Elenca i metodi di una classe o di un oggetto specificato.
- Costanti: Elenca tutte le costanti disponibili.
Utilizzo di base
Per utilizzare il comando ls, basta digitare il seguente comando nella shell PsySH:
ls
Questo restituirà un elenco completo delle variabili, classi e altri elementi nel contesto corrente.
Esempi pratici
Elenco delle variabili nel contesto corrente
Supponiamo di avere le seguenti variabili definite:
$nome = "Mario";
$eta = 30;
Digitando ls, vedrai un output simile al seguente:
Variables:
$nome
$eta
Esplorare i metodi di una classe o oggetto
Se hai un oggetto, come ad esempio una nuova istanza della classe DateTime, puoi utilizzare
ls per elencare i suoi metodi:
$data = new DateTime();
ls $data
Questo mostrerà tutti i metodi disponibili nella classe DateTime, ad esempio:
Methods:
__construct
format
getTimestamp
setDate
... (altri metodi)
Esplorare classi definite
Se vuoi esplorare tutte le classi attualmente dichiarate nel contesto, usa:
ls --classes
Questo mostrerà un elenco di tutte le classi disponibili, comprese le classi PHP standard e quelle definite dall’utente.
Opzioni aggiuntive
Il comando ls supporta diverse opzioni per filtrare i risultati:
--vars: Mostra solo le variabili.--constants: Mostra solo le costanti.--methods: Mostra solo i metodi di una classe o di un oggetto.--classes: Mostra solo le classi definite.
Il comando show in PsySH
Il comando show consente di visualizzare informazioni dettagliate su:
- Variabili: Mostra il tipo e il valore di una variabile.
- Classi: Visualizza la definizione di una classe, inclusi metodi e proprietà.
- Funzioni: Mostra la definizione e i dettagli di una funzione.
- Costanti: Elenca e descrive le costanti disponibili.
Utilizzo di base
Per utilizzare il comando show, basta specificare il nome dell’elemento da ispezionare. Ad esempio:
show $variabile
Oppure:
show NomeClasse
Esempi pratici
Ispezionare una variabile
Supponiamo di avere la seguente variabile:
$nome = "PsySH";
Utilizzando il comando show:
show $nome
L’output sarà simile al seguente:
Name: $nome
Type: string
Value: "PsySH"
Ispezionare una classe
Supponiamo di avere la seguente classe:
class Esempio {
public $proprieta = "valore";
public function metodo() {
return "ciao";
}
}
Per visualizzarne la definizione, utilizza:
show Esempio
L’output includerà i dettagli delle proprietà e dei metodi della classe:
Class: Esempio
Properties:
public $proprieta
Methods:
public metodo()
Ispezionare una funzione
Puoi anche ispezionare una funzione PHP definita nel contesto attuale o una funzione nativa:
show strlen
L’output mostrerà la firma e una descrizione della funzione:
Function: strlen(string $string): int
Description: Get the length of a string