Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Da PHP a JavaScript con Babel

Babel è un compilatore da sorgente a sorgente, che traduce PHP in codice JavaScript perfettamente leggibile e aderente alle specifiche ECMAScript 7
Da PHP a JavaScript con Babel
Babel è un compilatore da sorgente a sorgente, che traduce PHP in codice JavaScript perfettamente leggibile e aderente alle specifiche ECMAScript 7
Link copiato negli appunti

"Qualsiasi applicazione che possa essere scritta in JavaScript verrà scritta infine in JavaScript", questa semplice affermazione riassume quella che è nota come "Legge di Atwood". Formulata oltre 10 anni fa essa ha trovato nel tempo diverse conferme, tanto che JavaScript ha ormai superato la sua configurazione originale di linguaggio client side nonché gli stretti confini dei browser Web. A tal proposito è possibile citare anche un progetto come Babel, pensato per convertire il codice PHP in JavaScript.

Babel estende la Legge di Atwood è permette di eseguire subset PHP sia tramite browser che via NodeJS, l'ambiente event driven multipiattaforma basato sull'engine V8. Si tratta sostanzialmente di un syntax translator o più precisamente di un tanspiler, cioè di un compilatore da sorgente a sorgente, che traduce PHP in codice JavaScript perfettamente leggibile e aderente alle specifiche ECMAScript 7.

AST to AST

Come sottolineato dal suo autore, la conversione operata da Babel è di tipo AST (Abstract Syntax Tree) to AST, il codice JavaScript così generato sarà valido dal punto di vista sintattico ma potrebbe non funzionare nello stesso modo a causa delle non poche differenze concettuali che esistono tra i due linguaggi. A partire da un sorgente come il seguente:

define('FOO', max(floatval($c), strlen("foo")));
$bar['x'][][$b] = json_encode(__FILE__);
class Foo extends Bar\Baz {
  var $z = "hello" . "world";
  function __construct($some = array(7)) {
    parent::__construct(func_get_args());
    self::${$k} = "{$this->z[10]}";
  }
}

verrà prodotto per esempio un output di questo tipo:

const FOO = Math.max(+c, "foo".length);
bar.x.push({[b]: JSON.stringify(__filename)});
class Foo extends Bar.Baz {
  constructor(some = [7]) {
    super(arguments);
    this.z = "hello" + "world";
    this.constructor[k] = `${this.z[10]}`;
  }
}

Da PHP a JavaScript con alcune limitazioni

Babel supporta buona parte della sintassi di PHP 7, costrutti come funzioni, closures, blocchi try/catch, istruzioni di controllo e classi (con alcune limitazioni) dovrebbero generare i comportamenti attesi, mentre funzioni native come strlen(), array_pop() e is_bool() vengono convertite nelle corrispondenti funzioni JavaScript.

Sempre dal punto di vista della traduzione bisogna tenere presente che gli array di PHP prevedono delle feature che non possono essere espresse facilmente in JavaScript, nello stesso modo in PHP NULL è semanticamente vicino a undefined e viene convertito come se si trattasse di un valore equivalente.

Dato che Babel necessita di NodeJS per il suo funzionamento è infine necessario considerare che $_POST[] non viene rappresentato come globale così come altri costrutti associati ai meccanismi di richiesta e risposta. die(), exit() e altre istruzioni per la terminazione dei processi sono poi considerate inappropriate.

Per ulteriori approfondimenti sulle incompatibilità o le compatibilità parziali è comunque possibile fare riferimento alla documentazione di Babel che è un progetto completamente Open Source.

Ti consigliamo anche