Ciao,

in questi giorni sto perfezionando uno scriptino a cui avevo iniziato a lavorare tempo fa e che poi avevo abbandonato per mancanza di tempo.
Avrei voluto scrivere un articolo su freephp.html.it in proposito, ma (sempre per mancanza di tempo) credo che dovrò aspettare un po'.
Intanto tiro fuori questa suppostina, sperando vi piaccia ;-)

Un grazie a Skidx e Kuarl con i quali tempo fa ho chiacchierato di questa cosa


Non sarebbe bello far interpretare a Javascript il formato di serializzazione di PHP e rendere trasparente il passaggio dei dati da PHP a Javascript e viceversa?
Magari abbinare questa possibilità all'utilizzo di AJAX (che non è una squadra di calcio ma un brutto acronimo che sta ad indicare la possibilità di effettuare HTTP Request in PHP, un po' come si fa in actionscript con Flash).
http://en.wikipedia.org/wiki/AJAX

gmail è l'esempio di maggiore successo di AJAX

Solo che anzichè usare XML potremmo rendere a PHP le cose semplici (un serialize() e il gioco è fatto, e facciamo fare il lavoro faticoso a Javascript).

In sostanza qualsiasi variabile PHP può essere serializzata,
http://freephp.html.it/articoli/view_articolo.asp?id=74


e attraverso uno dei due Javascript che ho realizzato, deserializzata e diventare una variabile JS.

Ecco un'esempio puramente dimostrativo

codice:
<html>
<head>
<script language="JavaScript" type="text/javascript" src="./js2php/PHPunserializer.js"></script>
<script language="JavaScript"  type="text/javascript" src="./js2php/PHPserializer.js"></script>

</head>
<body>
<script language="JavaScript" type="text/javascript">

/****
Da PHP a JS
****/
/*
phpStr è una variabile Javascript che contiene una stringa d'esempio ottenuta attraverso PHP facendo

$a = array('a', 'b', 1,2,3,4, array('alfa','beta','gamma','delta'), 7, 8, '10', 'ufo'=> 'booo!') ;
   
echo addslashes(serialize($a)) ;

*/

 var phpStr = 'a:11:{i:0;s:1:\"a\";i:1;s:1:\"b\";i:2;i:1;i:3;i:2;i:4;i:3;i:5;i:4;i:6;a:4:{i:0;s:4:\"alfa\";i:1;s:4:\"beta\";i:2;s:5:\"gamma\";i:3;s:5:\"delta\";}i:7;i:7;i:8;i:8;i:9;s:2:\"10\";s:3:\"ufo\";s:5:\"booo!\";} ' ;

 var unserializer =  new PHPunserializer() ;
 var php2js = unserializer.parse(phpStr) ;
 
 //stampa "gamma"
 alert(php2js[6][2]) ;
 

/****
Da JS di nuovo a PHP
****/

var serializer =  new PHPserializer() ;
var js2php = serializer.render(php2js) ;

//stampa una stringa che può essere correttamente letta dalla funzione PHP usnerialize()
document.write(js2php) ;
</script>

</body>
</html>
Nell'esempio io ho iniettato direttamente la stringa PHP, ma in realtà la comunicazione da PHP a JS e Viceversa dovrebbe avvenire attraverso l'oggetto XMLHTTP

Per saperne di più su AJAX e XMLHTTP
http://pro.html.it/articoli/id_591/idcat_11/pro.html

http://www.phpnews.it/content/view/267/80/


Se volete fare qualche prova trovate le classi Javascript che ho realizzato qui
http://digilander.libero.it/dustbin0/js2php.zip





P.s.
la tecnica che sto utilizzando è abbastanza conosciuta tra chi programma in Flash, io stesso ho realizzato una versione anche per Actionscript.
Se siete interessati a Flash però ci sono già delle ottime classi che hanno portato molto avanti questo utilizzo della serializzazione PHP

Ad esempio da un'idea originaria di Sephirot qualcuno ha tirato fuori PHpObject
http://ghostwire.com/go/28

P.p.s
E se non volessimo usare XMLHTTP, se volessimo soltanto tradurre un oggetto o un array PHP rendendolo direttamente fruibile in Javascript?

Un sistema (non, l'ho ancora testato molto) potrebbe essere questo...

Anzichè far creare il Javascript a PHP, iniettiamo nel Javascript solo una stringa PHP serializzata

<?php
//funzione ausiliaria
function jscriptize($content)
{
return("'".addslashes($content)."'+\n") ;
}

//funzione principale
function toJS($phpVar, $varName = 'php')
{
$jsBegin = "var {$varName}=" ;
$jsBody = wordwrap(serialize($phpVar), 35, "+", true) ;
$jsBody = explode('+', $jsBody) ;
$jsBody = array_map('jscriptize', $jsBody) ;
$jsBody = $jsBegin . substr(join('', $jsBody), 0, -2) . ';' ;

return($jsBody) ;
}

//Oggetto PHP di test
$x = new stdclass ;
$x->a = array(
12,
'uno' => 10,
'due' => null,
25 ,
array('hello', 'ho " la','ciao','hi')
) ;
$x->b = 'ciao a tutti bell\'i + e brutti { è à ò' ;

echo( toJS($x) ) ;
/*
Stampa qualcosa del genere che poi può essere utilizzato dall'userializer in javascript

var php='O:8:\"stdClass\":2:{s:1:\"a\";a:5:{i:0;'+
'i:12;s:3:\"uno\";i:10;s:3:\"due\";N;i:1'+
';i:25;i:2;a:4:{i:0;s:5:\"hello\";i:1;'+
's:7:\"ho \"'+
'la\";i:2;s:4:\"ciao\";i:3;s:2:\"hi\";}}s'+
':1:\"b\";s:38:\"ciao a tutti bell\'i '+
' e brutti { è à ò\";}';
*/
?>