{"id":22291,"date":"2020-07-31T07:17:40","date_gmt":"2020-07-31T05:17:40","guid":{"rendered":"https:\/\/savinol.sg-host.com\/webdesign\/da-php-a-javascript-con-babel\/"},"modified":"2020-07-31T07:17:40","modified_gmt":"2020-07-31T05:17:40","slug":"da-php-a-javascript-con-babel","status":"publish","type":"post","link":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/","title":{"rendered":"Da PHP a JavaScript con Babel"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>\u201c<em>Qualsiasi applicazione che possa essere scritta in JavaScript verr\u00e0 scritta infine in JavaScript<\/em>\u201c, questa semplice affermazione riassume quella che \u00e8 nota come \u201c<strong>Legge di Atwood<\/strong>\u201c. Formulata oltre 10 anni fa essa ha trovato nel tempo diverse conferme, tanto che <strong>JavaScript<\/strong> ha ormai superato la sua configurazione originale di linguaggio client side nonch\u00e9 gli stretti confini dei browser Web. A tal proposito \u00e8 possibile citare anche un progetto come <strong>Babel<\/strong>, pensato per convertire il codice <strong>PHP<\/strong> in JavaScript.<span id=\"more-398744\"\/><\/p>\n<p>Babel estende la Legge di Atwood \u00e8 permette di eseguire subset PHP sia tramite browser che via <strong>NodeJS<\/strong>, l\u2019ambiente event driven multipiattaforma basato sull\u2019engine V8. Si tratta sostanzialmente di un syntax translator o pi\u00f9 precisamente di un tanspiler, cio\u00e8 di un compilatore da sorgente a sorgente, che traduce PHP in codice JavaScript perfettamente leggibile e aderente alle specifiche ECMAScript 7.<\/p>\n<h2>AST to AST<\/h2>\n<p>Come sottolineato dal suo autore, la conversione operata da Babel \u00e8 di tipo AST (<em>Abstract Syntax Tree<\/em>) to AST, il codice JavaScript cos\u00ec generato sar\u00e0 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:<\/p>\n<pre><code class=\"language-php\">\ndefine('FOO', max(floatval($c), strlen(\"foo\")));\n$bar['x'][][$b] = json_encode(__FILE__);\nclass Foo extends BarBaz {\n  var $z = \"hello\" . \"world\";\n  function __construct($some = array(7)) {\n    parent::__construct(func_get_args());\n    self::${$k} = \"{$this-&gt;z[10]}\";\n  }\n}\n<\/code><\/pre>\n<p>verr\u00e0 prodotto per esempio un output di questo tipo:<\/p>\n<pre><code class=\"language-javascript\">\nconst FOO = Math.max(+c, \"foo\".length);\nbar.x.push({[b]: JSON.stringify(__filename)});\nclass Foo extends Bar.Baz {\n  constructor(some = [7]) {\n    super(arguments);\n    this.z = \"hello\" + \"world\";\n    this.constructor[k] = `${this.z[10]}`;\n  }\n}\n<\/code><\/pre>\n<h2>Da PHP a JavaScript con alcune limitazioni<\/h2>\n<p>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 <code>strlen()<\/code>, <code>array_pop()<\/code> e <code>is_bool()<\/code> vengono convertite nelle corrispondenti funzioni JavaScript.<\/p>\n<p>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 <code>NULL<\/code> \u00e8 semanticamente vicino a <code>undefined<\/code> e viene convertito come se si trattasse di un valore equivalente.<\/p>\n<p>Dato che Babel necessita di NodeJS per il suo funzionamento \u00e8 infine necessario considerare che <code>$_POST[]<\/code> non viene rappresentato come globale cos\u00ec come altri costrutti associati ai meccanismi di richiesta e risposta. <code>die()<\/code>, <code>exit()<\/code> e altre istruzioni per la terminazione dei processi sono poi considerate inappropriate.<\/p>\n<p>Per ulteriori approfondimenti sulle incompatibilit\u00e0 o le compatibilit\u00e0 parziali \u00e8 comunque possibile fare riferimento alla documentazione di Babel che \u00e8 un progetto completamente Open Source.<\/p>\n<p><em>Fonte<\/em>: <a href=\"https:\/\/gitlab.com\/kornelski\/babel-preset-php\" class=\"text-link text-link--special\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"underline\">Babel<\/span><i class=\"ico-external\"\/><\/a><\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"http:\/\/feedproxy.google.com\/~r\/htmlitedit\/~3\/Cjt8thhEoWk\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u201cQualsiasi applicazione che possa essere scritta in JavaScript verr\u00e0 scritta infine in JavaScript\u201c, questa semplice affermazione riassume quella che \u00e8 nota come \u201cLegge di Atwood\u201c. 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\u00e9 gli stretti confini&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":""},"categories":[37],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Da PHP a JavaScript con Babel - AGENZIA WEB Italia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Da PHP a JavaScript con Babel - AGENZIA WEB Italia\" \/>\n<meta property=\"og:description\" content=\"\u201cQualsiasi applicazione che possa essere scritta in JavaScript verr\u00e0 scritta infine in JavaScript\u201c, questa semplice affermazione riassume quella che \u00e8 nota come \u201cLegge di Atwood\u201c. 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\u00e9 gli stretti confini...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\" \/>\n<meta property=\"og:site_name\" content=\"AGENZIA WEB Italia\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-31T05:17:40+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\"},\"headline\":\"Da PHP a JavaScript con Babel\",\"datePublished\":\"2020-07-31T05:17:40+00:00\",\"dateModified\":\"2020-07-31T05:17:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\"},\"wordCount\":372,\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"articleSection\":[\"News\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\",\"name\":\"Da PHP a JavaScript con Babel - AGENZIA WEB Italia\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\"},\"datePublished\":\"2020-07-31T05:17:40+00:00\",\"dateModified\":\"2020-07-31T05:17:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Da PHP a JavaScript con Babel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"name\":\"AGENZIA WEB Italia\",\"description\":\"Web design Web agency Italia\",\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\",\"name\":\"Multimedia Web\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"contentUrl\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"width\":200,\"height\":57,\"caption\":\"Multimedia Web\"},\"image\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"caption\":\"admin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Da PHP a JavaScript con Babel - AGENZIA WEB Italia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/","og_locale":"it_IT","og_type":"article","og_title":"Da PHP a JavaScript con Babel - AGENZIA WEB Italia","og_description":"\u201cQualsiasi applicazione che possa essere scritta in JavaScript verr\u00e0 scritta infine in JavaScript\u201c, questa semplice affermazione riassume quella che \u00e8 nota come \u201cLegge di Atwood\u201c. 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\u00e9 gli stretti confini...","og_url":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/","og_site_name":"AGENZIA WEB Italia","article_published_time":"2020-07-31T05:17:40+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"2 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#article","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/"},"author":{"name":"admin","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42"},"headline":"Da PHP a JavaScript con Babel","datePublished":"2020-07-31T05:17:40+00:00","dateModified":"2020-07-31T05:17:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/"},"wordCount":372,"publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"articleSection":["News"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/","name":"Da PHP a JavaScript con Babel - AGENZIA WEB Italia","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website"},"datePublished":"2020-07-31T05:17:40+00:00","dateModified":"2020-07-31T05:17:40+00:00","breadcrumb":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/da-php-a-javascript-con-babel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nycwebdesign.eu\/webdesign\/"},{"@type":"ListItem","position":2,"name":"Da PHP a JavaScript con Babel"}]},{"@type":"WebSite","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","name":"AGENZIA WEB Italia","description":"Web design Web agency Italia","publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization","name":"Multimedia Web","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","contentUrl":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","width":200,"height":57,"caption":"Multimedia Web"},"image":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42","name":"admin","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","caption":"admin"}}]}},"_links":{"self":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22291"}],"collection":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/comments?post=22291"}],"version-history":[{"count":0,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22291\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/media?parent=22291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/categories?post=22291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/tags?post=22291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}