maxim Thu May 2 00:35:23 2002 EDT Modified files: /phpdoc/it/appendices migration.xml Log: Newly translated. Has some TODO still.
Index: phpdoc/it/appendices/migration.xml diff -u /dev/null phpdoc/it/appendices/migration.xml:1.3 --- /dev/null Thu May 2 00:35:23 2002 +++ phpdoc/it/appendices/migration.xml Thu May 2 00:35:22 2002 @@ -0,0 +1,401 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- EN-Revision: 1.18 Maintainer: maxim Status: ready --> +<!-- + + TODO: + + There's still a need to precise better the terms: + + Start/End tags (tradotto: "tag di inizio/fine") + greater-than (tradotto: "superiore-che") + less-than (tradotto: "inferiore-che") + Short-circuited boolean evaluation (tradotto: "valutazione booleana è +cortocircuita") + +--> +<appendix id="migration"> + <title>Migrazione da PHP/FI 2 a PHP 3</title> + + <section id="migration.about"> + <title>Incompatibilià in 3.0</title> + + <simpara> + PHP 3.0 è rescritto da terra in su. Ha un proprio parser che è + molto più robusto è consistente della 2.0. 3.0 che è anche significativamente + più veloce ed usa meno memoria. Tuttavia, alcuni di questi miglioramenti + non sarebbero resi possibili senza i cambiamenti delle compatibilità, + sia in sintassi che nelle funzionalità. + </simpara> + + <simpara> + In più, gli sviluppatori di PHP hanno cercato di pulire sia sintassi del PHP + che la semantica nella versione 3.0, e questo ha anche causato alcune + incompatibilità. A lungo termine, crediamo che questi cambiamenti siano + per il migliore. + </simpara> + + <simpara> + Questo capitolo proverà a guidarti tra le incompatibilità che potresti trovare + passando da PHP/FI 2.0 a PHP 3.0 ed auitarti a resolverli. Almeno dove è + necessario, le nuove funzionalità non vi sono accennate. + </simpara> + + <simpara> + Un programma di conversione che può convertire automaticamente i vostri + vecchi script di PHP/FI 2.0 esiste già. Può essere trovato in + <filename class="directory">convertor</filename> sottodirectory della + distribuzione di PHP 3.0. Questo programma, comunque, interferisce soltanto + sui cambiamenti di sintassi, per ciò bisogna legere questo capitolo lo stesso. + </simpara> + </section> + + <section id="migration.startendtags"> + <title>Inizio/fine tags di PHP</title> + + <para> + La prima cosa che probabilmente noterete è la modificha dei tag + del inizio e della fine di PHP. Il vecchio <literal><? ></literal> + è stato sostituito da tre nuove forme possibili: + <example> + <title>Migrazione: vecchio inizio/fine tag</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Questo è il codice di PHP/FI 2.0\n"; ?> +]]> + </programlisting> + </example> + La versione 2.0, PHP/FI supporta anche questa variazione: + <example> + <title>Migrazione: primo nuovo inizio/fine tag</title> + <programlisting role="php"> +<![CDATA[ +<? echo "Questo è il codice di PHP 3.0\n"; ?> +]]> + </programlisting> + </example> + + Nota che il tag della fine ora consiste di un punto interrogativo + e di un superiore-che carattere anziché solamente un superiore-che. + Comunque, se pensate di usare XML sul vostro server, avrete dei problemi + con la prima nuova variazione perché PHP potrebbe provare ad eseguire + il XML markup nei documenti XML come un codice PHP. Per questa + raggione, la seguente variazione è stata introdotta: + + <example> + <title>Migrazione: secondo nuovo inizio/fine tag</title> + <programlisting role="php"> +<![CDATA[ +<?php echo "Questo è il codice di PHP 3.0\n"; ?> +]]> + </programlisting> + </example> + + Alcune persone hanno avuto dei problemi con gli editor che + non capiscono affatto i tag di istruzione del processo. + Microsoft FrontPage è un tale editor. Per evitare un suo + comportamento scoretto la seguente variazione è anche stata + introdotta: + + <example> + <title>Migrazione: terzo nuovo inizio/fine tag</title> + <programlisting role="php"> +<![CDATA[ +<script language="php"> + + echo "Questo è il codice di PHP 3.0\n"; + +</script> +]]> + </programlisting> + </example> + </para> + </section> + + <section id="migration.if-endif"> + <title>Sintassi di if..endif</title> + + <para> + Un modo `alternativo' di scrivere le istruzioni if/elseif/else usando + if(); elseif(); else; endif; non può essere implementato efficientemente + senza aggiungere una gran parte di complessità nel parser 3.0. + Per questo, la sintassi è stata cambiata: + <example> + <title>Migrazione: vecchia sintassi di if..endif</title> + <programlisting role="php"> +<![CDATA[ +if ($foo); + echo "Si\n"; +elseif ($bar); + echo "Quasi\n"; +else; + echo "No\n"; +endif; +]]> + </programlisting> + </example> + <example> + <title>Migrazione: nuova sintassi di if..endif</title> + <programlisting role="php"> +<![CDATA[ +if ($foo): + echo "Si\n"; +elseif ($bar): + echo "Quasi\n"; +else: + echo "No\n"; +endif; +]]> + </programlisting> + </example> + Nota che il punto e virgola e stata sostituita dai due punti in tutte + le istruzioni tranne quella che termina l'espressione (endif). + </para> + </section> + + <section id="migration-while"> + <title>Sintassi di while</title> + <para> + Stesso come con if..endif, la sintassi di while..endwhile è anche cambiata: + <example> + <title>Migrazione: vecchia sintassi di while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($piu_roba_qui); + ... +endwhile; +]]> + </programlisting> + </example> + <example> + <title>Migrazione: nuova sintassi di while..endwhile</title> + <programlisting role="php"> +<![CDATA[ +while ($piu_roba_qui): + ... +endwhile; +]]> + </programlisting> + </example> + </para> + <warning> + <simpara> + Usando la vecchia sintassi di while..endwhile in PHP 3.0, + otterreste un ciclo infinito. + </simpara> + </warning> + </section> + + <section id="migration.expr"> + <title>Tipi di espressione</title> + <simpara> + PHP/FI 2.0 usava il lato sinistro delle espressioni per + determinare che tipo il risultato dovrebbe essere. PHP 3.0 + prende entrambi i lati in considerazione quando determina + i tipi del risultato, e questo può causare un comportamento + inaspettato dei script 2.0 in versione 3.0. + </simpara> + <para> + Considera questo exampio: + <informalexample> + <programlisting role="php"> +<![CDATA[ +$a[0]=5; +$a[1]=7; + +$key = key($a); +while ("" != $key) { + echo "$keyn"; + next($a); +} +]]> + </programlisting> + </informalexample> + + In PHP/FI 2.0, questo visualizzerebbe entrambi gli indici di $a. + In PHP 3.0, invece, non visualizzerebbe nulla. Il motivo è che in + PHP 2.0, siccome il tipo del'argomento sinistro è una stringa, è stato + fatto una paragono tra le stringhe, ed infatti, <literal>""</literal> + non è uguale a <literal>"0"</literal>, per ciò il ciclo è continuato. + In PHP 3.0, quando una stringa è paragonata ad un intero, + viene fatto un paragone fra gli interi (la stringa è convertita in intero). + Ciò provoca una confrontazione di <literal>atoi("")</literal> che è + <literal>0</literal>, e <literal>variablelist</literal> che è anche + <literal>0</literal>, e siccome <literal>0==0</literal>, il ciclo non + passa neanche una volta. + </para> + <para> + La soluzione è semplice. Sostituisci l'espressione while con: + <informalexample> + <programlisting role="php"> +<![CDATA[ +while ((string)$key != "") { +]]> + </programlisting> + </informalexample> + </para> + </section> + + <section id="migration.errors"> + <title>I messaggi di errore sono cambiati</title> + <simpara> + I messaggi di errore in PHP 3.0 sono spesso più esatti di quanto erano + quelli di 2.0, anche se non è più possibile di visuallizare + il codice che causa l'errore. Si visuallizerano comunque il nome del file + e la linea sulla quale l'errore è accaduto. + </simpara> + </section> + + <section id="migration.booleval"> + <title>Valutazione cortocircuita booleana</title> + <simpara> + In PHP 3.0 valutazione booleana è cortocircuita. Questo significa che + in una espressione come <literal>(1 || testami())</literal>, la + funzione <function>testami</function> non sarebbe eseguita poiché + niente può cambiare il risultato dell'espressione dopo<literal>1</literal>. + </simpara> + + <simpara> + Questa è una questione di compatibilità minore, ma può causare dei effetti +laterali inattesi. + </simpara> + </section> + + <section id="migration.truefalse"> + <title>&true;/&false; valori ritornati dalle funzioni</title> + <simpara> + La maggior parte delle funzioni interne sono state riscritte in modo + che ritornino &true; al successo e &false; al fallimento, invece + di 0 e -1 come nel PHP/FI 2.0. Il nuovo comportamento + aggevola un codice più logico, come <literal>$fp = fopen("/tuo/file") or + fail("fallito!");</literal>. Datto che PHP/FI 2.0 non ha avuto una chiara + regola su cosa deve ritornare una funzione fallita, la maggior parte dei + tali scritti probabilmente dovranno essere verificate manualmente dopo + aver usato il convertitore 2.0 - 3.0. + </simpara> + <para> + <example> + <title>Migrazione da 2.0: valori di ritorno, vecchio codice</title> + <programlisting role="php"> +<![CDATA[ +$fp = fopen($file, "r"); +if ($fp == -1); + echo("Apertura per la lettura del $file fallita<br>\n"); +endif; +]]> + </programlisting> + </example> + <example> + <title>Migrazione da 2.0: valori di ritorno, nuovo codice</title> + <programlisting role="php"> +<![CDATA[ +$fp = @fopen($file, "r") or print("Apertura per la lettura del $file fallita<br>\n"); +]]> + </programlisting> + </example> + </para> + </section> + + <section id="migration-other"> + <title>Altre incompatibilità</title> + + <itemizedlist> + <listitem><simpara> + Il modulo Apache per PHP 3.0 non supporta più le versioni Apache + inferiori a 1.2. Apache 1.2 e superiore è necessario. + </simpara></listitem> + + <listitem><simpara> + <function>echo</function> non supporta più una stringa formattata. + Usa per questo la funzione <function>printf</function>. + </simpara></listitem> + + <listitem><simpara> + In PHP/FI 2.0, un implementazione collateranea causava + <literal>$foo[0]</literal> di avere lo stesso effetto di + <literal>$foo</literal>. Questo non è più cosi in PHP 3.0. + </simpara></listitem> + + <listitem> + <simpara> + Leggere gli array con <literal>$array[]</literal> non è piu supportato + </simpara> + <simpara> + Cioè, non si puo aprire un array con un ciclo che fà + <literal>$data = $array[]</literal>. Usa <function>current</function> + e <function>next</function> per avere questo effetto. + </simpara> + <simpara> + Inoltre, <literal>$array1[] = $array2</literal> non + aggiunge i valori di <literal>$array2</literal> a + <literal>$array1</literal>, ma invece aggiunge + <literal>$array2</literal> come làultima entrata di + <literal>$array1</literal>. Vedi anche il supporto di array multidimensionali. + </simpara> + </listitem> + + <listitem> + <simpara> + <literal>"+"</literal> non è più usato come un operatore + di concatenazione per le stringhe, invece converte i suoi argumenti + in numeri e realizza l'aggiunta numerica. Usa <literal>"."</literal> al posto +suo. + </simpara> + </listitem> + </itemizedlist> + + <example> + <title>Migrazione da 2.0: concatenazione delle stringhe</title> + <programlisting role="php"> +<![CDATA[ +echo "1" + "1"; +]]> + </programlisting> + <para> + In PHP 2.0 avrebbe emettesso 11, in PHP 3.0 invece emetterebbe 2. + Perciò si usa: + <programlisting role="php"> +<![CDATA[ +echo "1"."1"; +]]> + </programlisting> + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a + $b; +]]> + </programlisting> + </para> + <para> + Emette 2 in entrambi PHP 2.0 e 3.0. + <programlisting role="php"> +<![CDATA[ +$a = 1; +$b = 1; +echo $a.$b; +]]> + </programlisting> + Questo emettera 11 in PHP 3.0. + </para> + </example> + </section> + +</appendix> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:1 +sgml-indent-data:t +indent-tabs-mode:nil +sgml-parent-document:nil +sgml-default-dtd-file:"../../manual.ced" +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +vim600: syn=xml fen fdm=syntax fdl=2 si +vim: et tw=78 syn=sgml +vi: ts=1 sw=1 +-->