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
+-->