cvs: phpdoc /it/language control-structures.xml
| From: | Simone Cortesi | Date: | Mon, 18 Mar 2002 19:00:15 +0000 |
| Subject: | cvs: phpdoc /it/language control-structures.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969343178@lists.php.net to get a copy of this message | ||
cortesi Mon Mar 18 14:00:15 2002 EDT
Modified files:
/phpdoc/it/language control-structures.xml
Log:
update to EN 1.55 by Marco Spisto
Index: phpdoc/it/language/control-structures.xml diff -u phpdoc/it/language/control-structures.xml:1.10 phpdoc/it/language/control-structures.xml:1.11 --- phpdoc/it/language/control-structures.xml:1.10 Tue Dec 18 13:00:12 2001 +++ phpdoc/it/language/control-structures.xml Mon Mar 18 14:00:05 2002 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.45 Maintainer: spisto Status: working --> +<!-- EN-Revision: 1.55 Maintainer: spisto Status: working --> <chapter id="control-structures"> <title>Strutture di controllo</title> @@ -17,7 +17,7 @@ <sect1 id="control-structures.if"> <title><literal>if</literal></title> <para> - Il costrutto <literal>if</literal> è uno delle più importanti + Il costrutto <literal>if</literal> è una delle più importanti caratteristiche di qualsiasi linguaggio, incluso PHP. Permette l'esecuzione condizionata di frammenti di codice. La struttura di controllo <literal>if</literal> di PHP è simile a quella del linguaggio C: @@ -31,14 +31,18 @@ </informalexample> </para> <simpara> - Come descritto nel capitolo sulle espressioni, expr restituirà il - suo valore di verità. Se <replaceable>espressione</replaceable> - è &true;, PHP eseguirà l'espressione, se - è &false;, la ignorerà. + Come descritto nella <link linkend="language.expressions">sezione sulle + espressioni</link>, <replaceable>espressione</replaceable> restiruirà il suo + valore booleano. Se <replaceable>espressione</replaceable> vale &true;, + PHP eseguirà <replaceable>istruzione</replaceable>, e se essa vale + &false; - la ignorerà. Più informazioni riguardo i valori valutati + &false; possono essere trovati nella sezione <link + linkend="language.types.boolean.casting">'Conversione in booleano'</link> + . </simpara> <para> - L'esempio che segue visualizzerà <computeroutput>a è maggiore - di b</computeroutput> se <replaceable>$a</replaceable> sarà maggiore + L'esempio che segue visualizzerà <computeroutput>a è maggiore + di b</computeroutput> se <replaceable>$a</replaceable> sarà maggiore di <replaceable>$b</replaceable>: <informalexample> <programlisting role="php"> @@ -52,17 +56,17 @@ <para> Spesso sarà necessario eseguire più di una istruzione condizionale. Naturalmente non è necessario, utilizzare una singola clausola - <literal>if</literal> per ciascuna istruzione. Si possono raggruppare diverse istruzioni - in un singolo gruppo di istruzioni. Per esemipo, il codice che segue - visualizzerà <computeroutput>a is bigger than b</computeroutput> - se <replaceable>$a</replaceable> è maggiore di <replaceable>$b</replaceable>, - e successivamente assegnerà il valore della variabile <replaceable>$a</replaceable> + <literal>if</literal> per ciascuna istruzione. Si possono raggruppare diverse istruzioni + in un singolo gruppo di istruzioni. Per esempio, il codice che segue + visualizzerà <computeroutput>a è maggiore di b</computeroutput> + se <replaceable>$a</replaceable> è maggiore di <replaceable>$b</replaceable>, + e successivamente assegnerà il valore della variabile <replaceable>$a</replaceable> alla variabile <replaceable>$b</replaceable>: <informalexample> <programlisting role="php"> <![CDATA[ if ($a > $b) { - print "a è maggiore dib"; + print "a è maggiore di b"; $b = $a; } ]]> @@ -70,9 +74,9 @@ </informalexample> </para> <simpara> - Si possono annidare indefinitamente istruzioni - <literal>if</literal>, la qual cosa fornisce piena - flessibilità per l'esecuzione di istruzioni condizionali in differenti punti del + Si possono annidare indefinitamente istruzioni + <literal>if</literal>, la qual cosa fornisce piena + flessibilità per l'esecuzione di istruzioni condizionali in diversi punti del programma. </simpara> </sect1> @@ -81,14 +85,14 @@ <title><literal>else</literal></title> <para> Spesso è necessario eseguire un'istruzione se una proposizione è vera - e un'altra istruzione se la proposizione è falsa. Per questo - si usa la clausola <literal>else</literal>. <literal>else</literal> + e un'altra istruzione se la proposizione è falsa. Per questo + si usa la clausola <literal>else</literal>. <literal>else</literal> estende il costrutto <literal>if</literal> aggiungendo la possibilità - di eseguire un'istruzione se l'espressione nel ramo <literal>if</literal> - è &false;. L'esempio che segue - visualizzerà <computeroutput>a è maggiore di - b</computeroutput> se <replaceable>$a</replaceable> è maggiore di - <replaceable>$b</replaceable> e <computeroutput>a NON è maggiore + di eseguire un'istruzione se l'espressione nel ramo <literal>if</literal> + è &false;. L'esempio che segue + visualizzerà <computeroutput>a è maggiore + di b</computeroutput> se <replaceable>$a</replaceable> è maggiore di + <replaceable>$b</replaceable> e <computeroutput>a NON è maggiore di b</computeroutput> altrimenti: <informalexample> <programlisting role="php"> @@ -101,10 +105,10 @@ ]]> </programlisting> </informalexample> - + Il ramo <literal>else</literal> viene eseguito solo se l'espressione - nel ramo <literal>if</literal> è - &false;, e, nel caso ci fossero delle clausole + nel ramo <literal>if</literal> è + &false;, e, nel caso ci fossero delle clausole <literal>elseif</literal>, solamente se le espressioni in esse contenute fossero anch'esse &false; (vedere <link linkend="control-structures.elseif">elseif</link>). @@ -116,16 +120,16 @@ <title><literal>elseif</literal></title> <para> <literal>elseif</literal>, come è facile intuire, è una combinazione - di <literal>if</literal> and <literal>else</literal>. Analogamente a + di <literal>if</literal> ed <literal>else</literal>. Analogamente ad <literal>else</literal>, estende <literal>if</literal> aggiungendo la possibilità di eseguire un'altra istruzione nel caso - in cui l'espressione contenuta nel ramo <literal>if</literal> - sia &false;. Però, a differenza - di <literal>else</literal>, si eseguirà l'istruzione alternativa - solamente se l'espressione contenuta nel ramo <literal>elseif</literal> - sarà &true;. L'esempio - che segue, visualizzerà <computeroutput>a è maggiore di - b</computeroutput>, <computeroutput>a è uguale a b</computeroutput> + in cui l'espressione contenuta nel ramo <literal>if</literal> + sia &false;. Però, a differenza + di <literal>else</literal>, si eseguirà l'istruzione alternativa + solamente se l'espressione contenuta nel ramo <literal>elseif</literal> + sarà &true;. L'esempio + che segue, visualizzerà <computeroutput>a è maggiore di + b</computeroutput>, <computeroutput>a è uguale a b</computeroutput> oppure <computeroutput>a è minore di b</computeroutput>: <informalexample> <programlisting role="php"> @@ -143,21 +147,21 @@ </para> <simpara> Nel medesimo blocco <literal>if</literal> possono essere presenti - più d'una clausola <literal>elseif</literal>. L'istruzione del - primo ramo <literal>elseif</literal> la cui espressione - sia &true; verrà eseguito. In PHP è possibile - scrivere 'else if' (due parole) e il significato sarà - lo stesso di 'elseif' (una sola parola). Il significato sintattico + più di una clausola <literal>elseif</literal>. Verrà eseguita + l'istruzione del primo ramo <literal>elseif</literal> la cui espressione + sia &true;. In PHP è possibile + scrivere 'else if' (due parole) e il significato sarà + lo stesso di 'elseif' (una sola parola). Il significato sintattico è leggermente differente (se si ha familiarità con il linguaggio C, esso ha lo stesso - comportamento) però al lato pratico l'effetto è + comportamento) però al lato pratico l'effetto è il medesimo. </simpara> <simpara> - L'istruzione di un ramo <literal>elseif</literal> si eseguirà solo se l'espressione del - ramo <literal>if</literal> e le espressioni dei - rami <literal>elseif</literal> precedenti sono + L'istruzione di un ramo <literal>elseif</literal> verrà eseguita solo se l'espressione del + ramo <literal>if</literal> e le espressioni dei + rami <literal>elseif</literal> precedenti sono &false;, e se l'espressione - del ramo <literal>elseif</literal> è + del ramo <literal>elseif</literal> è &true;. </simpara> </sect1> @@ -165,11 +169,11 @@ <sect1 id="control-structures.alternative-syntax"> <title>Sintassi alternativa per le strutture di controllo</title> <para> - PHP offre una sintassi alternatica per alcune delle sue strutture di controllo; + PHP offre una sintassi alternativa per alcune delle sue strutture di controllo; vale a dire, <literal>if</literal>, <literal>while</literal>, <literal>for</literal>, <literal>foreach</literal> e <literal>switch</literal>. - Fondamentalmente la sintassi alternativa consiste nel sostituire + Fondamentalmente la sintassi alternativa consiste nel sostituire la prima parentesi graffa con il carattere "duepunti" (:) e la seconda parentesi graffa con <literal>endif;</literal>, <literal>endwhile;</literal>, <literal>endfor;</literal>, <literal>endforeach;</literal>, oppure @@ -178,21 +182,21 @@ <programlisting role="php"> <![CDATA[ <?php if ($a == 5): ?> -A é maggiore di 5 +a è uguale a 5 <?php endif; ?> ]]> </programlisting> </informalexample> </para> <simpara> - Nell'esempio precedente, il blocco HTML "A = 5" è incluso nel ramo - <literal>if</literal> scritto con utilizzando la sintassi alternativa. + Nell'esempio precedente, il blocco HTML "a è uguale a 5" è incluso nel ramo + <literal>if</literal> scritto utilizzando la sintassi alternativa. Il blocco HTML verrà visualizzato solamente se $a è uguale a 5. </simpara> <para> - La sintassi alternativa si applica anche a <literal>else</literal> e - <literal>elseif</literal>. Nell'esempio che segue si mostra come utilizzare la sintassi alternativa - nel caso di un <literal>if</literal> con <literal>elseif</literal> e + La sintassi alternativa si applica anche ad <literal>else</literal> ed + <literal>elseif</literal>. Nell'esempio che segue si mostra come utilizzare la sintassi alternativa + nel caso di un <literal>if</literal> con <literal>elseif</literal> ed <literal>else</literal>: <informalexample> <programlisting role="php"> @@ -204,7 +208,7 @@ print "a è uguale a 6"; print "!!!"; else: - print "a non è uguale nè a 5 nè a 6"; + print "a non è nè 5 nè 6"; endif; ]]> </programlisting> @@ -221,8 +225,8 @@ <title><literal>while</literal></title> <para> Il ciclo <literal>while</literal> è la forma di ciclo più semplice - tra quelle possibili in PHP. Si comporta come la sua controparte nel linguaggio C. - La forma basica di un ciclo <literal>while</literal> è la seguente: + tra quelle possibili in PHP. Si comporta come la sua controparte nel linguaggio C. + La forma di base di un ciclo <literal>while</literal> è la seguente: <informalexample> <programlisting> <![CDATA[ @@ -232,22 +236,22 @@ </informalexample> </para> <simpara> - Il significato di un ciclo <literal>while</literal> è semplice. - Istruisce l'interprete PHP perchè esegua l'istruzione (o le istruzioni) - in esso racchiuse, ripetutamente, fintanto che l'espressionbe contenuta + Il significato di un ciclo <literal>while</literal> è semplice. + Istruisce l'interprete PHP perchè esegua l'istruzione (o le istruzioni) + in esso racchiuse, ripetutamente, fintanto che l'espressione contenuta nella clausola <literal>while</literal> ha valore &true;. - Il valore dell'espressione viene verificato ogni volta che il ciclo + Il valore dell'espressione viene verificato ogni volta che il ciclo si ripete (iterazione), così che anche se il valore dell'espressione cambia durante - l'esecuzione dell'istruzione, il ciclo non termina fino + l'esecuzione dell'istruzione, il ciclo non termina fino all'iterazione successiva. Ovviamente, se l'espressione nella clausola <literal>while</literal> ha valore - &false; dall'inizio, l'istruzione racchiusa nel blocco non verrà eseguita nemmeno + &false; dall'inizio, l'istruzione racchiusa nel blocco non verrà eseguita nemmeno una volta. </simpara> <para> - Come nel caso della struttura di controllo <literal>if</literal>, si possono raggruppare - più istruzioni nello medesimo ciclo <literal>while</literal> - racchiudendo le istruzioni in parentesi grafa, oppure + Come nel caso della struttura di controllo <literal>if</literal>, si possono raggruppare + più istruzioni nello medesimo ciclo <literal>while</literal> + racchiudendo le istruzioni in parentesi graffa, oppure utilizzando la sintassi alternativa: <informalexample> <programlisting> @@ -258,7 +262,7 @@ </informalexample> </para> <para> - Gli esempi seguenti sono identici e entrambi visualizzano i numeri da + Gli esempi seguenti sono identici e entrambi visualizzano i numeri da 1 a 10: <informalexample> <programlisting> @@ -268,8 +272,8 @@ $i = 1; while ($i <= 10) { print $i++; /* Il valore visualizzato è il valore della - variabile $i prima dell'incremento - (post-increment) */ + variabile $i prima dell'incremento + (post-incremento) */ } /* esempio 2 */ @@ -292,12 +296,12 @@ <literal>while</literal>, con l'unica differenza che il valore dell'espressione viene controllato alla fine di ogni iterazione anzichè all'inizio. La differenza più importante rispetto a <literal>while</literal> è che - la prima iterazione di un blocco <literal>do..while</literal>verrà - sempre eseguita (il valore dell'espressione viene controllato alla fine - del ciclo), mentre non è necessariamente vero in un - ciclo <literal>while</literal> questo (il valore dell'espressione viene + la prima iterazione di un blocco <literal>do..while</literal> verrà + sempre eseguita (il valore dell'espressione viene controllato alla fine + del ciclo), mentre non sarà necessariamente eseguito in un + ciclo <literal>while</literal> (il valore dell'espressione viene controllato all'inizio del ciclo, e se tale valore è - &false; dall'inizio, l'esecuzione del ciclo + &false; dall'inizio, l'esecuzione del ciclo termina immediatamente). </simpara> <para> @@ -317,13 +321,13 @@ <simpara> Il ciclo precedente verrà eseguito un'unica volta, dal momento che alla prima iterazione, quando si controlla l'espressione, il suo valore sarà - &false; ($i non è maggiore di 0) e il ciclo di + &false; ($i non è maggiore di 0) e il ciclo di esecuzioni, termina. </simpara> <para> - Chi ha utilizzato il linguaggio C conosce probabilmente un'altro modo di utilizzare - il ciclo <literal>do..while</literal>, che permette di terminare l'esecuzione - delle istruzioni durante l'esecuzione stessa, utilizzando + Chi ha utilizzato il linguaggio C conosce probabilmente un'altro modo di utilizzare + il ciclo <literal>do..while</literal>, che permette di terminare l'esecuzione + delle istruzioni durante l'esecuzione stessa, utilizzando <literal>do..while</literal>(0), e usando l'istruzione <link linkend="control-structures.break"><literal>break</literal></link>. Il codice che segue esemplifica questa possibilità: @@ -350,7 +354,7 @@ </para> <simpara> Non vi preoccupate se l'esempio non è sufficientemente chiaro. - Si possono scrivere ottimi programmi PHP anche senza far ricorso a questa + Si possono scrivere ottimi programmi PHP anche senza far ricorso a questa 'possibilità'. </simpara> </sect1> @@ -364,36 +368,36 @@ <informalexample> <programlisting> <![CDATA[ -for (expr1; expr2; expr3) istruzione +for (espressione1; espressione2; espressione3) istruzione ]]> </programlisting> </informalexample> </para> <simpara> - Il valore della prima espressione (<replaceable>expr1</replaceable>) viene - verificato (eseguito) una sola volta incondizionatamente all'inizio del + Il valore della prima espressione (<replaceable>espressione1</replaceable>) viene + verificato (eseguito) una sola volta incondizionatamente all'inizio del ciclo. </simpara> <simpara> - Ad ogni iterazione, - si controlla il valore di <replaceable>expr2</replaceable>. Se è - &true;, il ciclo prosegue e viene eseguita - l'istruzione (o le istruzioni) contenuta nel blocco; + Ad ogni iterazione, + si controlla il valore di <replaceable>espressione2</replaceable>. Se è + &true;, il ciclo prosegue e viene eseguita + l'istruzione (o le istruzioni) contenuta nel blocco; se è &false;, l'esecuzione del ciclo termina. </simpara> <simpara> - Al termine di ogni iterazione, <replaceable>expr3</replaceable> si verifica - il valore di <replaceable>expr3</replaceable>. + Al termine di ogni iterazione, si verifica (si esegue) + il valore di <replaceable>espressione3</replaceable>. </simpara> <simpara> - Le due espressioni possono anche non essere presenti. - Se non esiste <replaceable>expr2</replaceable> significa che il ciclo deve - essere eseguito indefinitamente (PHP considera implicitamente che il - suo valore è &true;, come in C). Questa possibilità in fondo non è + Le due espressioni possono anche non essere presenti. + Se non esiste <replaceable>espressione2</replaceable> significa che il ciclo deve + essere eseguito indefinitamente (PHP considera implicitamente che il + suo valore è &true;, come in C). Questa possibilità in fondo non è utile come può sembrare perchè obbliga a terminare il ciclo utilizzando - l'istruzione <link + l'istruzione <link linkend="control-structures.break"><literal>break</literal></link> - invece di utilizzare le espressioni di verità del ciclo <literal>for</literal> + invece di utilizzare le espressioni booleane del ciclo <literal>for</literal> . </simpara> <para> @@ -402,13 +406,13 @@ <informalexample> <programlisting role="php"> <![CDATA[ -/* example 1 */ +/* esempio 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } -/* example 2 */ +/* esempio 2 */ for ($i = 1;;$i++) { if ($i > 10) { @@ -417,7 +421,7 @@ print $i; } -/* example 3 */ +/* esempio 3 */ $i = 1; for (;;) { @@ -428,7 +432,7 @@ $i++; } -/* example 4 */ +/* esempio 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; ]]> @@ -436,30 +440,30 @@ </informalexample> </para> <simpara> - Naturalmente il primo esempio sembra il migliore (o - forse il quarto), ma l'uso del + Naturalmente il primo esempio sembra il migliore (o + forse il quarto), ma l'uso del ciclo <literal>for</literal> senza espressioni può essere utile in molti casi. </simpara> <para> - PHP offre una sintassi alternativa (con i "punto e virgola") per i + PHP offre una sintassi alternativa (con i "punto e virgola") per i cicli <literal>for</literal>. <informalexample> <programlisting> <![CDATA[ -for (expr1; expr2; expr3): istruzione; ...; endfor; +for (espressione1; espressione2; espressione3): istruzione; ...; endfor; ]]> </programlisting> </informalexample> </para> <para> - Alcuni linguaggi permettono l'uso della struttura di controllo <literal>foreach</literal> per - attraversare un array o una tabella hash. PHP 3 non premette l'uso di tale ciclo mentre PHP 4 sì - (vedere <link - linkend="control-structures.foreach">foreach</link>). In PHP 3 è + Alcuni linguaggi permettono l'uso della struttura di controllo <literal>foreach</literal> per + attraversare un array o una tabella hash. PHP 3 non premette l'uso di tale ciclo mentre PHP 4 si + (vedere <link + linkend="control-structures.foreach">foreach</link>). In PHP 3 è possibile combinare <link linkend="control-structures.while">while</link> con la funzione <function>list</function> e <function>each</function> - per ottenere la stessa funzionalià. Si veda la documentazione si queste funzioni + per ottenere la stessa funzionalià. Si veda la documentazione di queste funzioni per ulteriori esempi. </para> @@ -469,24 +473,24 @@ <title><literal>foreach</literal></title> <para> PHP 4 (non PHP 3) permette l'uso della struttura di controllo <literal>foreach</literal>, - alla stessa maniera del linguaggio Perl e altri. - <literal>foreach</literal> offre una maniera semplice di attraversare un array. Esistono due possibili notazioni sintattiche; la seconda è + alla stessa maniera del linguaggio Perl e altri. Ciò semplicemente fornisce + una facile metodo per attraversare un array. Esistono due possibili notazioni sintattiche; la seconda è un'utile estensione della prima: <informalexample> <programlisting> <![CDATA[ foreach(array_expression as $value) istruzione -foreach(array_expression as $key => $value) istruzione +foreach(array_expression as $key => $value) istruzione ]]> </programlisting> </informalexample> </para> <simpara> - La prima attraversa l'array dato da <literal>array_expression</literal>. - Ad ogni ciclo, si assegna il valore dell'elemento corrente a <literal>$value</literal> - e il puntatore interno avanza di una posizione (in modo tale che - al ciclo successivo l'elemento corrente sará il successivo elemento - dell'array). + La prima attraversa l'array dato da + <literal>array_expression</literal>. Ad ogni ciclo, si assegna il valore + dell'elemento corrente a <literal>$value</literal> e + il puntatore interno avanza di una posizione (in modo tale che al ciclo successivo + l'elemento corrente sarà il successivo elemento dell'array). </simpara> <simpara> La seconda esegue lo stesso ciclo con la differenza che il @@ -496,7 +500,7 @@ <para> <note> <para> - All'inizio dell'esecuzione di un ciclo <literal>foreach</literal> + All'inizio dell'esecuzione di un ciclo <literal>foreach</literal> il puntatore interno viene automaticamente posizionato nella prima posizione. Questo significa che non è necessario utilizzare la funzione <function>reset</function> prima di un ciclo <literal>foreach</literal> @@ -508,9 +512,9 @@ <note> <para> È importante notare che <literal>foreach</literal> opera su una copia - dell'array, pertanto il puntatore dell'array originale non viene - modificato come accade utilizzando la funzione <function>each</function> - e le modifiche agli elementi dell'array non + dell'array, non sull'array stesso, pertanto il puntatore dell'array originale + non viene modificato come accade utilizzando la funzione <function>each</function> + e le modifiche agli elementi dell'array non appaiono nell'array originale. </para> </note> @@ -533,7 +537,7 @@ } foreach ($arr as $value) { - echo "Valore: $value<br>\n"; + echo "Valore: $value<br>\n"; } ]]> </programlisting> @@ -544,53 +548,54 @@ <![CDATA[ reset ($arr); while (list($key, $value) = each ($arr)) { - echo "Key: $key; Valore: $value<br>\n"; + echo "Chiave: $key; Valore: $value<br>\n"; } -foreach ($arr as $key => $value) { - echo "Key: $key; Valore: $value<br>\n"; +foreach ($arr as $key => $value) { + echo "Chiave: $key; Valore: $value<br>\n"; } ]]> </programlisting> </informalexample> </para> <para> - Di seguito, altri esempi per mostrare possibili utilizzi: + Di seguito, altri esempi per mostrare possibili utilizzi: <informalexample> <programlisting role="php"> <![CDATA[ -/* foreach example 1: value only */ +/* esempio 1 foreach: solo il valore */ $a = array (1, 2, 3, 17); foreach ($a as $v) { - print "Valore corrente of \$a: $v.\n"; + print "Valore corrente di \$a: $v.\n"; } -/* foreach example 2: value (with key printed for illustration) */ +/* esempio 2 foreach: valore (con la chiave stampata) */ $a = array (1, 2, 3, 17); -$i = 0; /* for illustrative purposes only */ +$i = 0; /* solo per un proposito illustrativo */ foreach($a as $v) { print "\$a[$i] => $v.\n"; + $i++; } -/* foreach example 3: key and value */ +/* esempio 3 foreach: chiave e valore */ $a = array ( - "one" => 1, - "two" => 2, - "three" => 3, - "seventeen" => 17 + "uno" => 1, + "due" => 2, + "tre" => 3, + "diciassette" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } -/* foreach example 4: multi-dimensional arrays */ +/* esempio 4 foreach: array multidimensionali */ $a[0][0] = "a"; $a[0][1] = "b"; @@ -603,7 +608,7 @@ } } -/* foreach example 5: dynamic arrays */ +/* esempio 5 foreach: array dinamici */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; @@ -624,17 +629,17 @@ </simpara> <simpara> <literal>break</literal> accetta un argomento opzionale che definisce, - nel caso di cicli annidati, il livello del ciclo che è da + nel caso di cicli annidati, il livello del ciclo che è da interrompere. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ -$arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); +$arr = array ('uno', 'due', 'tre', 'quattro', 'stop', 'cinque'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { - break; /* Si può anche usare 'break 1;'. */ + break; /* Qui si può anche usare 'break 1;'. */ } echo "$val<br>\n"; } @@ -664,20 +669,20 @@ <title><literal>continue</literal></title> <simpara> <literal>continue</literal> si utilizza per interrompere l'esecuzione - del ciclo corrente e continuare con l'esecuzione + del ciclo corrente e continuare con l'esecuzione all'inizio del ciclo successivo. </simpara> <simpara> <literal>continue</literal> accetta un argomento numerico opzionale che definisce, nel caso di cicli annidati, il numero di cicli da interrompere - e a cui iniziare l'esecuzione dell'iterazione successiva. + e da cui iniziare l'esecuzione dell'iterazione successiva. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ while (list ($key, $value) = each ($arr)) { - if (!($key % 2)) { // skip odd members + if (!($key % 2)) { // salta odd members continue; } do_something_odd ($value); @@ -685,16 +690,16 @@ $i = 0; while ($i++ < 5) { - echo "Outer<br>\n"; + echo "Esterno<br>\n"; while (1) { - echo " Middle<br>\n"; + echo " Centrale<br>\n"; while (1) { - echo " Inner<br>\n"; + echo " Interno<br>\n"; continue 3; } - echo "This never gets output.<br>\n"; + echo "Questo non sarà mai stampato.<br>\n"; } - echo "Neither does this.<br>\n"; + echo "Nemmeno questo.<br>\n"; } ]]> </programlisting> @@ -705,10 +710,10 @@ <sect1 id="control-structures.switch"> <title><literal>switch</literal></title> <simpara> - <literal>switch</literal> è simile a una serie di - IF sulla stessa espressione. In molti casi può essere - necessario confrontare una variabile (o espressione) con differenti - valori ed eseguire un differente blocco di istruzioni a seconda + <literal>switch</literal> è simile a una serie di + if sulla stessa espressione. In molti casi può essere + necessario confrontare una variabile (o espressione) con + differenti valori ed eseguire un differente blocco di istruzioni a seconda del valore di detta variabile. Questo è esattamente quello che fa la struttura di controllo <literal>switch</literal>. </simpara> @@ -721,24 +726,24 @@ <programlisting role="php"> <![CDATA[ if ($i == 0) { - print "i equals 0"; + print "i è uguale a 0"; } if ($i == 1) { - print "i equals 1"; + print "i è uguale a 1"; } if ($i == 2) { - print "i equals 2"; + print "i è uguale a 2"; } switch ($i) { case 0: - print "i equals 0"; + print "i è uguale a 0"; break; case 1: - print "i equals 1"; + print "i è uguale a 1"; break; case 2: - print "i equals 2"; + print "i è uguale a 2"; break; } ]]> @@ -749,15 +754,15 @@ È importante comprendere esattamente come viene eseguita la clausola <literal>switch</literal> per evitare errori. Un'istruzione <literal>switch</literal> esegue linea dopo linea - le istruzioni in essa contenuta. - Solamente quando incontra una clausola <literal>case</literal> + le istruzioni in essa contenuta. All'inizio non viene eseguito + alcun codice. Solamente quando incontra una clausola <literal>case</literal> il cui valore è uguale al valore della viariabile, PHP inizia ad - eseguire le istruzioni contenute nel blocco case. - PHP continua l'esecuzione delle istruzioni fino alla termine del - blocco <literal>switch</literal>, o quando incontra un'istruzione + eseguire le istruzioni contenute nel blocco <literal>case</literal>. + PHP continua l'esecuzione delle istruzioni fino alla termine del + blocco <literal>switch</literal>, o quando incontra un'istruzione <literal>break</literal>. Se non esiste alcuna istruzione <literal>break</literal> al termine di un blocco case - PHP continuerà l'esecuzione le istruzioni del blocco case successivo. + PHP continuerà l'esecuzione delle istruzioni del blocco case successivo. Per esempio: <informalexample> <programlisting role="php"> @@ -779,15 +784,15 @@ istruzioni contenute nei blocchi case. Se $i è uguale a 1, PHP eseguirà le istruzioni degli ultimi due blocchi case e solamente se $i è uguale a 2 otterremo il risultato voluto - e si visualizzerà solo '$i è uguale a 2'. - Pertanto è importante non dimenticare l'istruzione <literal>break</literal> + e si visualizzerà solo '$i è uguale a 2'. Pertanto + è importante non dimenticare l'istruzione <literal>break</literal> (anche se in alcuni casi potrà essere necessario non utilizzarla). </simpara> <simpara> In un'istruzione <literal>switch</literal>, la condizione in parentesi viene valutata una sola volta e il risultato viene confrontato con - ciascun ramo <literal>case</literal>. Utilizzando <literal>elseif</literal>, - la ondizione viene valutata una seconda volta. Se tale condizione è più + ciascun ramo <literal>case</literal>. Utilizzando <literal>elseif</literal>, + la condizione viene valutata una seconda volta. Se tale condizione è più complessa di un semplice confronto e/o è in un ciclo piuttosto pesante, l'uso di <literal>switch</literal> dovrebbe garantire un minor tempo di esecuzione. </simpara> @@ -801,10 +806,10 @@ case 0: case 1: case 2: - print "i is less than 3 but not negative"; + print "i è minore di 3 ma non negativo"; break; case 3: - print "i is 3"; + print "i è 3"; } ]]> </programlisting> @@ -812,8 +817,8 @@ </para> <para> Un blocco case speciale è il il blocco case di default. - Uguagli tutte le condizioni non uguagliate nei blocchi case - precedenti e dev'essere l'ultimo blocco <literal>case</literal> statement. Per esempio: + Uguaglia tutte le condizioni non uguagliate nei blocchi case precedenti + e dev'essere l'ultimo blocco <literal>case</literal>. Per esempio: <informalexample> <programlisting role="php"> <![CDATA[ @@ -828,21 +833,21 @@ print "i è uguale a 2"; break; default: - print "i non è ugluale a 0, 1 o 2"; + print "i è diverso da 0, 1 o 2"; } ]]> </programlisting> </informalexample> </para> <para> - L'espressione in un ramo case <literal>case</literal> può essere + L'espressione in un ramo <literal>case</literal> può essere qualsiasi espressione il cui valore sarà di tipo intero, decimale, numerico e stringa. Array e oggetti (objects) non sono ammessi a meno che non siano dereferenziati a un tipo di dato semplice tra quelli precedentemente elencati. </para> <para> Come per altre strutture di controllo è possibile utilizzare una sintassi - alternativa. Si veda + alternativa. Si veda <link linkend="control-structures.alternative-syntax">Sintassi alternativa per le strutture di controllo</link> per ulteriori esempi. <informalexample> @@ -859,7 +864,7 @@ print "i è uguale a 2"; break; default: - print "i non è uguale a 0, 1 o 2"; + print "i è diverso da 0, 1 o 2"; endswitch; ]]> </programlisting> @@ -872,8 +877,8 @@ <para> Il costrutto <literal>declare</literal> si usa per definire direttive di esecuzione per blocchi di istruzioni. - La sintassi è simile alla - sintassi di altre strutture di controllo: + La sintassi è simile alla sintassi + di altre strutture di controllo: <informalexample> <programlisting> <![CDATA[ @@ -886,48 +891,48 @@ La sezione <literal>direttiva</literal> permette di impostare il comportamento del blocco <literal>declare</literal> . - Attualemente è riconosciuta una sola direttiva: la + Attualmente è riconosciuta una sola direttiva: la direttiva <literal>ticks</literal>. (Fare riferimento più in basso per ulteriori informazioni relative alla - direttiva + direttiva <link linkend="control-structures.declare.ticks">ticks</link>) </para> <para> - La parte <literal>istruzione</literal> del - blocco <literal>declare</literal> verrà eseguita. Come + Verrà eseguita la parte <literal>istruzione</literal> del + blocco <literal>declare</literal> - come verrà eseguita e quali effetti collaterali emergeranno durante l'esecuzione potrà dipendere dalla direttiva impostata nel blocco <literal>direttiva</literal>. </para> <sect2 id="control-structures.declare.ticks"> <title>Ticks</title> - <para>A tick is an event that occurs for every - <replaceable>N</replaceable> low-level statements executed - by the parser within the <literal>declare</literal> block. - The value for <replaceable>N</replaceable> is specified - using <literal>ticks=<replaceable>N</replaceable></literal> - within the <literal>declare</literal> blocks's - <literal>directive</literal> section. + <para>Un tick è un evento che si verifica per ogni + <replaceable>N</replaceable> istruzioni di basso livello eseguite + dal parser all'interno del blocco <literal>declare</literal>. + Il valore per <replaceable>N</replaceable> viene specificato + usando <literal>ticks=<replaceable>N</replaceable></literal> + all'interno della sezione <literal>direttiva</literal> del blocco + <literal>declare</literal>. </para> <para> - The event(s) that occurs on each tick is specified using the - <function>register_tick_function</function>. See the example - below for more details. Note that more than one event can occur - for each tick. + L'evento (o gli eventi) che si verifica su ogni tick è specificato usando + <function>register_tick_function</function>. Vedere l'esempio + più in basso per ulteriori dettagli. Notare che può verificarsi più di un evento + per ogni tick. </para> <para> <example> - <title>Profile a section of PHP code</title> + <title>Segue una sezione di codice PHP</title> <programlisting role="php"> <![CDATA[ <pre> <?php -// A function that records the time when it is called +// Una funzione che registra il tempo quando viene chiamata function profile ($dump = FALSE) { static $profile; - // Return the times stored in profile, then erase it + // Restituisce il tempo immagazinato in $profile, successivamente lo cancella if ($dump) { $temp = $profile; unset ($profile); @@ -937,578 +942,464 @@ $profile[] = microtime (); } -// Set up a tick handler +// Imposta un tick handler register_tick_function("profile"); -// Initialize the function before the declare block +// Inizializza la funzione prima del blocco declare profile (); -// Run a block of code, throw a tick every 2nd statement -declare (ticks=2) { +// Esegue un blocco di codice, attraverso un tick ogni seconda istruzione +declare (ticks = 2) { for ($x = 1; $x < 50; ++$x) { echo similar_text (md5($x), md5($x*$x)), "<br>"; } } -// Display the data stored in the profiler +// Mostra i dati immagazionati nel profilo print_r (profile (TRUE)); ?> </pre> ]]> </programlisting> </example> - The example profiles the PHP code within the 'declare' - block, recording the time at which every second low-level - statement in the block was executed. This information can - then be used to find the slow areas within particular - segments of code. This process can be performed using other - methods: using ticks is more convenient and easier to - implement. + L'esempio descrive il codice PHP all'interno del blocco 'declare', + registrando il tempo in cui è stata eseguita ogni seconda istruzione + di basso livello. Questa informazione può + poi essere usata per trovare le aree lente all'interno di particolari + segmenti di codice. Questo processo può essere ottimizzato usando altri + metodi: usando i tick è più conveniente e facile da + implementare. </para> <simpara> - Ticks are well suited for debugging, implementing simple - multitasking, backgrounded I/O and many other tasks. + I tick sono ben adeguati per il debugging, l'implementazione di semplici + multitasking, backgrounded I/O e molti altri compiti. </simpara> <simpara> - See also <function>register_tick_function</function> and + Vedere anche <function>register_tick_function</function> e <function>unregister_tick_function</function>. </simpara> </sect2> </sect1> - - <sect1 id="function.require"> - <title><function>require</function></title> - <simpara> - The <function>require</function> statement replaces itself with - the specified file, much like the C preprocessor's - <literal>#include</literal> works. - </simpara> - <simpara> - If "URL fopen wrappers" are enabled in PHP (which they are in the - default configuration), you can specify the file to be - <function>require</function>ed using an URL instead of a local - pathname. See <link linkend="features.remote-files">Remote - files</link> and <function>fopen</function> for more information. - </simpara> + + <sect1 id="function.return"> + <title>return</title> <simpara> - An important note about how this works is that when a file is - <function>include</function>ed or <function>require</function>ed, - parsing drops out of PHP mode and into HTML mode at the beginning - of the target file, and resumes PHP mode again at the end. For - this reason, any code inside the target file which should be - executed as PHP code must be enclosed within <link - linkend="language.basic-syntax.phpmode">valid PHP start and end - tags</link>. + Se viene chiamato all'interno di una funzione, l'istruzione <function>return</function> + termina immediatamente l'esecuzione della funzione corrente, e + restituisce il suo argomento come valore della funzione + chiamata. <function>return</function> terminerà anche l'esecuzione di un'istruzione + <function>eval</function> o di un file di script. + </simpara> + <simpara> + Se viene chiamato in uno scope globale, allora verrà terrminata l'esecuzione + del file di script corrente. Nel caso in cui il file di script corrente sia un file chiamato da + <function>include</function> o <function>require</function>, + il controllo viene passato al file chiamante. Ciononostante, se + il file di script corrente è un file chiamato da <function>include</function>, allora + il valore dato da <function>return</function> verrà restituito + come valore della chiamata <function>include</function>. Se + viene chiamato <function>return</function> all'interno del file di script + principale, allora l'esecuzione dello script terminerà. Se il file di script corrente + è stato nominato da <link + linkend="ini.auto-prepend-file">auto_prepend_file</link> o <link + linkend="ini.auto-append-file">auto_append_file</link> + con le opzioni di configurazione nel <link linkend="configuration.file"> + file di configurazione</link>, allora l'esecuzione di quello script + termina. </simpara> - <simpara> - <function>require</function> is not actually a function in PHP; - rather, it is a language construct. It is subject to some - different rules than functions are. For instance, - <function>require</function> is not subject to any containing - control structures. For another, it does not return any value; - attempting to read a return value from a - <function>require</function> call results in a parse error. - </simpara> - <simpara> - Unlike <function>include</function>, <function>require</function> - will <emphasis>always</emphasis> read in the target file, - <emphasis>even if the line it's on never executes</emphasis>. If - you want to conditionally include a file, use - <function>include</function>. The conditional statement won't - affect the <function>require</function>. However, if the line on - which the <function>require</function> occurs is not executed, - neither will any of the code in the target file be executed. + <simpara>Per maggiori informazioni, consultare <link + linkend="functions.returning-values">Valori restituiti</link>. </simpara> + <note> + <simpara> + Notate che poichè <function>return</function> è un costrutto di linguaggio + e non una funzione, le parentesi che circondano i suoi + argomenti <emphasis>non</emphasis> sono richieste --infatti, è + più comune evitarle che usarle, nonostante ciò + non c'è motivo di preferire un modo o l'altro. + </simpara> + </note> + </sect1> + + + <sect1 id="function.require"> + <title><function>require</function></title> + <simpara> - Similarly, looping structures do not affect the behaviour of - <function>require</function>. Although the code contained in the - target file is still subject to the loop, the - <function>require</function> itself happens only once. + L'istruzione <function>require</function> include e valuta + il file specifico. </simpara> - <para> - This means that you can't put a <function>require</function> - statement inside of a loop structure and expect it to include the - contents of a different file on each iteration. To do that, use an - <function>include</function> statement. - <informalexample> - <programlisting role="php"> -<![CDATA[ -require ('header.inc'); -]]> - </programlisting> - </informalexample> - </para> <simpara> - When a file is <function>require</function>ed, the code it - contains inherits the variable scope of the line on which the - <function>require</function> occurs. Any variables available at - that line in the calling file will be available within the called - file. If the <function>require</function> occurs inside a - function within the calling file, then all of the code contained - in the called file will behave as though it had been defined - inside that function. + <function>require</function> include e valuta uno specifico file. + Informazioni dettagliate su come funziona quest'inclusione sono descritte nella + documentazione di <function>include</function>. + </simpara> + <simpara> + <function>require</function> e <function>include</function> + sono identiche in ogni senso eccetto per come esse trattano gli errori. + <function>include</function> produce un + <link linkend="internal.e-warning">Warning</link> mentre + <function>require</function> restituisce un <link linkend="internal.e-error"> + Fatal Error</link>. In altre parole, non esitate ad usare + <function>require</function> se volete che un file mancante fermi l'esecuzione + della pagina. <function>include</function> non si comporta in questo modo, lo + script continuerà nonostante tutto. Assicuratevi di avere un appropriato + <link linkend="ini.include-path">include_path</link> impostato a dovere. </simpara> <para> - If the <function>require</function>ed file is called via HTTP - using the fopen wrappers, and if the target server interprets the - target file as PHP code, variables may be passed to the - <function>require</function>ed file using an URL request string as - used with HTTP GET. This is not strictly speaking the same thing - as <function>require</function>ing the file and having it inherit - the parent file's variable scope; the script is actually being run - on the remote server and the result is then being included into - the local script. - <informalexample> + <example> + <title>Esempio di base con <function>require</function></title> <programlisting role="php"> <![CDATA[ -/* This example assumes that someserver is configured to parse .php - * files and not .txt files. Also, 'works' here means that the variables - * $varone and $vartwo are available within the require()ed file. */ +<?php -/* Won't work; file.txt wasn't handled by someserver. */ -require ("http://someserver/file.txt?varone=1&vartwo=2"); +require 'prepend.php'; -/* Won't work; looks for a file named 'file.php?varone=1&vartwo=2' - * on the local filesystem. */ -require ("file.php?varone=1&vartwo=2"); +require $qualche_file; -/* Works. */ -require ("http://someserver/file.php?varone=1&vartwo=2"); +require ('qualche_file.txt'); -$varone = 1; -$vartwo = 2; -require ("file.txt"); /* Works. */ -require ("file.php"); /* Works. */ +?> ]]> </programlisting> - </informalexample> + </example> </para> <simpara> - In PHP 3, it is possible to execute a <literal>return</literal> - statement inside a <function>require</function>ed file, as long as - that statement occurs in the global scope of the - <function>require</function>ed file. It may not occur within any - block (meaning inside braces ({}). In PHP 4, however, this ability - has been discontinued. If you need this functionality, see - <function>include</function>. + Vedere la documentazione di <function>include</function> per più esempi. </simpara> + <note> + <simpara> + Prima di PHP 4.0.2, si applica la seguente logica: <function>require</function> + tenterà sempre di leggere il file chiamato, anche se la riga su cui si trova non verrà mai eseguita. + L'istruzione condizionale non avrà effetto su <function>require</function>. Comunque, + se la riga su cui si verifica <function>require</function> non viene eseguita, + non sarà eseguito nemmeno il codice del file incluso. Similmente, le strutture + cicliche non avranno effetto sul comportamento di <function>require</function>. Sebbene + il codice contenuto nel file incluso è ancora soggetto a ciclo, + <function>require</function> stesso si verifica solo una volta. + </simpara> + </note> <simpara> - See also <function>include</function>, <function>require_once</function>, - <function>include_once</function>, <function>readfile</function>, - and <function>virtual</function>. + Vedere anche <function>include</function>, <function>require_once</function>, + <function>include_once</function>, <function>eval</function>, + <function>file</function>, <function>readfile</function>, + <function>virtual</function> e <link linkend="ini.include-path">include_path</link>. </simpara> </sect1> - <sect1 id="function.include"> + <sect1 id="function.include"> <title><function>include</function></title> <simpara> - The <function>include</function> statement includes and evaluates - the specified file. - </simpara> - <simpara> - If "URL fopen wrappers" are enabled in PHP (which they are in the - default configuration), you can specify the file to be - <function>include</function>ed using an URL instead of a local - pathname. See <link linkend="features.remote-files">Remote - files</link> and <function>fopen</function> for more information. + L'istruzione <function>include</function> include e valuta + il file specificato. </simpara> <simpara> - An important note about how this works is that when a file is - <function>include</function>ed or <function>require</function>ed, - parsing drops out of PHP mode and into HTML mode at the beginning - of the target file, and resumes again at the end. For this reason, - any code inside the target file which should be executed as PHP - code must be enclosed within <link - linkend="language.basic-syntax.phpmode">valid PHP start and end - tags</link>. + La documentazione seguente si applica anche a <function>require</function>. + I due costrutti sono identici in ogni aspetto eccetto per come essi trattano + gli errori. <function>include</function> produce un + <link linkend="internal.e-warning">Warning</link> mentre <function>require</function> + restituisce un <link linkend="internal.e-error">Fatal Error</link>. + In altre parole, usate <function>require</function> se volete che + un file mancante fermi l'esecuzione della pagina. <function>include</function> + non si comporta in questo modo, lo script continuerà nonostante tutto. Assicuratevi di avere un + appropriato <link linkend="ini.include-path">include_path</link> impostato a dovere. + </simpara> + <simpara> + Quando un file viene incluso, il codice che esso contiene eredita lo + <link linkend="language.variables.scope">scope delle variabili</link> della + riga in cui si verifica l'inclusione. Qualsiasi variabile disponibile in quella riga + nella chiamata al file sarà disponibile all'interno del file chiamato, da + quel punto in avanti. </simpara> <para> - This happens each time the <function>include</function> statement - is encountered, so you can use an <function>include</function> - statement within a looping structure to include a number of - different files. - <informalexample> - <programlisting role="php"> -<![CDATA[ -$files = array ('first.inc', 'second.inc', 'third.inc'); -for ($i = 0; $i < count($files); $i++) { - include $files[$i]; -} -]]> - </programlisting> - </informalexample> - </para> - <para> - <function>include</function> differs from - <function>require</function> in that the include statement is - re-evaluated each time it is encountered (and only when it is - being executed), whereas the <function>require</function> - statement is replaced by the required file when it is first - encountered, whether the contents of the file will be evaluated or - not (for example, if it is inside an <link - linkend="control-structures.if">if</link> statement whose - condition evaluated to &false;). - </para> - <para> - Because <function>include</function> is a special language - construct, you must enclose it within a statement block if it is - inside a conditional block. - <informalexample> - <programlisting role="php"> + <example> + <title>Esempio di base con <function>include</function></title> + <programlisting role="php"> <![CDATA[ -/* This is WRONG and will not work as desired. */ +vars.php +<?php -if ($condition) - include($file); -else - include($other); +$colore = 'verde'; +$frutto = 'mela'; -/* This is CORRECT. */ +?> -if ($condition) { - include($file); -} else { - include($other); -} +test.php +<?php + +echo "Una $frutto $colore"; // Una + +include 'vars.php'; + +echo "Una $frutto $colore"; // Una mela verde + +?> ]]> - </programlisting> - </informalexample> + </programlisting> + </example> </para> <simpara> - In both PHP 3 and PHP 4, it is possible to execute a - <literal>return</literal> statement inside an - <function>include</function>ed file, in order to terminate - processing in that file and return to the script which called - it. Some differences in the way this works exist, however. The - first is that in PHP 3, the <literal>return</literal> may not - appear inside a block unless it's a function block, in which case - the <literal>return</literal> applies to that function and not the - whole file. In PHP 4, however, this restriction does not - exist. Also, PHP 4 allows you to return values from - <function>include</function>ed files. You can take the value of - the <function>include</function> call as you would a normal - function. This generates a parse error in PHP 3. + Se l'inclusione si verifica dentro una funzione all'interno del file chiamato, + allora tutto il codice contenuto nel file chiamato si comporterà come + se esso sia stato definito all'interno di una funzione. Così, esso seguirà + lo scope delle variabili di quella funzione. </simpara> - <example> - <title><function>include</function> in PHP 3 and PHP 4</title> - <para> - Assume the existence of the following file (named - <filename>test.inc</filename>) in the same directory as the main - file: - <programlisting role="php"> + <para> + <example> + <title>Inclusione all'interno di funzioni</title> + <programlisting role="php"> <![CDATA[ <?php -echo "Before the return <br>\n"; -if (1) { - return 27; + +function foo() +{ +global $frutto; + + include 'vars.php'; + + echo "Una $frutto $colore"; } -echo "After the return <br>\n"; -?> -]]> - </programlisting> - </para> - <para> - Assume that the main file (<filename>main.html</filename>) - contains the following: - <programlisting role="php"> -<![CDATA[ -<?php -$retval = include ('test.inc'); -echo "File returned: '$retval'<br>\n"; -?> -]]> - </programlisting> - </para> - <para> - When <filename>main.html</filename> is called in PHP 3, it will - generate a parse error on line 2; you can't take the value of an - <function>include</function> in PHP 3. In PHP 4, however, the - result will be: - <screen> -Before the return -File returned: '27' - </screen> - </para> - <para> - Now, assume that <filename>main.html</filename> has been altered - to contain the following: - <programlisting role="php"> -<![CDATA[ -<?php -include ('test.inc'); -echo "Back in main.html<br>\n"; + +/* vars.php è nello scope di foo() così * + * $colore NON è disponibile fuori di * + * questo scope. $frutto si perchè è stato * + * dichiarato globale. */ + +foo(); // Una mela verde +echo "Una $frutto $colore"; // Una mela + ?> ]]> </programlisting> - </para> - <para> - In PHP 4, the output will be: - <screen> -Before the return -Back in main.html - </screen> - However, PHP 3 will give the following output: - <screen> -Before the return -27Back in main.html - -Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5 - </screen> - </para> - <para> - The above parse error is a result of the fact that the - <literal>return</literal> statement is enclosed in a non-function - block within <filename>test.inc</filename>. When the return is - moved outside of the block, the output is: - <screen> -Before the return -27Back in main.html - </screen> - </para> - <para> - The spurious '27' is due to the fact that PHP 3 does not support - <literal>return</literal>ing values from files like that. - </para> - </example> + </example> + </para> <simpara> - When a file is <function>include</function>ed, the code it - contains inherits the variable scope of the line on which the - <function>include</function> occurs. Any variables available at - that line in the calling file will be available within the called - file. If the <function>include</function> occurs inside a - function within the calling file, then all of the code contained - in the called file will behave as though it had been defined - inside that function. + Quando un file viene incluso, il parsing esce dalla modalità PHP e + entra in modalità HTML all'inizio del file incluso, e riprende + alla fine. Per questa ragione, qualunque codice all'interno del + file incluso che dovrebbe essere eseguito come codice PHP deve essere incluso all'interno + dei <link linkend="language.basic-syntax.phpmode">tag PHP validi di apertura + e chiusura</link>. + </simpara> + <simpara> + Se "<link linkend="ini.allow-url-fopen">URL fopen wrappers</link>" + nel PHP sono abilitati (come nella configurazione di default), + potete specificare il file da includere usando un URL (via HTTP) + invece che un percorso locale. Se il server chiamato interpreta + il file incluso come codice PHP, le variabili possono essere passate + al file incluso usando una stringa di richiesta URL come con l'utilizzo di HTTP GET. Non è + proprio parlare della stessa cosa includere il file e averlo + ereditato dallo scope di variabili del file chiamante; lo script è stato attualmente + eseguito su un server remoto e il risultato è poi stato + incluso nello script locale. </simpara> <para> - If the <function>include</function>ed file is called via HTTP - using the fopen wrappers, and if the target server interprets the - target file as PHP code, variables may be passed to the - <function>include</function>ed file using an URL request string as - used with HTTP GET. This is not strictly speaking the same thing - as <function>include</function>ing the file and having it inherit - the parent file's variable scope; the script is actually being run - on the remote server and the result is then being included into - the local script. - <informalexample> + <example> + <title><function>include</function> attraverso HTTP</title> <programlisting role="php"> <![CDATA[ -/* This example assumes that someserver is configured to parse .php - * files and not .txt files. Also, 'works' here means that the variables - * $varone and $vartwo are available within the include()ed file. */ - -/* Won't work; file.txt wasn't handled by someserver. */ -include ("http://someserver/file.txt?varone=1vartwo=2"); - -/* Won't work; looks for a file named 'file.php?varone=1&vartwo=2' - * on the local filesystem. */ -include ("file.php?varone=1&vartwo=2"); +<?php -/* Works. */ -include ("http://someserver/file.php?varone=1&vartwo=2"); +/* Questo esempio assume che www.example.com è configurato per eseguire file * + * .php e non file .txt. Anche, 'Funziona' qui significa che le variabili * + * $foo e $bar sono disponibili all'interno del file incluso. */ + +// Non funzionerà; file.txt non è stato trattato da www.example.com come PHP +include 'http://www.example.com/file.txt?foo=1&bar=2'; + +// Non funzionerà; cercare un file chiamato'file.php?foo=1&bar=2' nel +// filesystem locale. +include 'file.php?foo=1&bar=2'; + +// Funziona. +include 'http://www.example.com/file.php?foo=1&bar=2'; + +$foo = 1; +$bar = 2; +include 'file.txt'; // Funziona. +include 'file.php'; // Funziona. -$varone = 1; -$vartwo = 2; -include ("file.txt"); /* Works. */ -include ("file.php"); /* Works. */ +?> ]]> </programlisting> - </informalexample> + </example> + Vedere anche <link linkend="features.remote-files">Remote files</link>, + <function>fopen</function> e <function>file</function> per informazioni + correlate. </para> - <simpara> - See also <function>require</function>, <function>require_once</function>, - <function>include_once</function>, <function>readfile</function>, - and <function>virtual</function>. - </simpara> - </sect1> - - <sect1 id="function.require-once"> - <title><function>require_once</function></title> <para> - The <function>require_once</function> statement replaces - itself with the specified file, much like the C preprocessor's - <literal>#include</literal> works, and in that respect is - similar to the <function>require</function> statement. The main - difference is that in an inclusion chain, the use of - <function>require_once</function> will assure that the code is - added to your script only once, and avoid clashes with variable - values or function names that can happen. + Poichè <function>include</function> e <function>require</function> + sono speciali costrutti di linguaggio, dovete includerli all'interno di + blocchi di istruzioni se si trovano in un blocco condizionale. </para> <para> - For example, if you create the following 2 include files - <literal>utils.inc</literal> and <literal>foolib.inc</literal> - <example> - <title>utils.inc</title> + <example> + <title>include() e i blocchi condizionali</title> <programlisting role="php"> <![CDATA[ <?php -define("PHPVERSION", floor(phpversion())); -echo "GLOBALS ARE NICE\n"; -function goodTea() -{ - return "Oolong tea tastes good!"; + +// Questo NON VA BENE e non funzionerà come desiderato. +if ($condizione) + include $file; +else + include $un_altro; + + +// Questo è CORRETTO. +if ($condizione) { + include $file; +} else { + include $un_altro; } + ?> ]]> </programlisting> - </example> - <example> - <title>foolib.inc</title> - <programlisting role="php"> + </example> + </para> + <simpara> + Trattamento dei valori restituiti: È possibile eseguire un'istruzione <function>return</function> + in un file incluso per terminare l'esecuzione di quel + file e restituirlo allo script che l'ha chiamato. È anche possibile restituire + valori dai file inclusi. Potete prendere il valore di una chiamata di inclusione come + fareste con una normale funzione. + </simpara> + <note> + <simpara> + In PHP 3, return potrebbe non apparire in un blocco a meno che esso sia + un blocco di funzione, nel qual caso <function>return</function> si applica + a quella funzione e non all'intero file. + </simpara> + </note> + <para> + <example> + <title><function>include</function> and the <function>return</function> statement</title> + <programlisting role="php"> <![CDATA[ +return.php <?php -require ("utils.inc"); -function showVar($var) -{ - if (PHPVERSION == 4) { - print_r($var); - } else { - var_dump($var); - } -} -// bunch of other functions ... +$var = 'PHP'; + +return $var; + ?> -]]> - </programlisting> - </example> - And then you write a script <literal>cause_error_require.php</literal> - <example> - <title>cause_error_require.php</title> - <programlisting role="php"> -<![CDATA[ + +noreturn.php <?php -require("foolib.inc"); -/* the following will generate an error */ -require("utils.inc"); -$foo = array("1",array("complex","quaternion")); -echo "this is requiring utils.inc again which is also\n"; -echo "required in foolib.inc\n"; -echo "Running goodTea: ".goodTea()."\n"; -echo "Printing foo: \n"; -showVar($foo); + +$var = 'PHP'; + ?> -]]> - </programlisting> - </example> - When you try running the latter one, the resulting ouptut will be (using - PHP 4.01pl2): - <informalexample> - <screen> -<![CDATA[ -GLOBALS ARE NICE -GLOBALS ARE NICE -Fatal error: Cannot redeclare goodTea() in utils.inc on line 5 -]]> - </screen> - </informalexample> - By modifying <literal>foolib.inc</literal> and - <literal>cause_errror_require.php</literal> - to use <function>require_once</function> - instead of <function>require</function> and renaming the - last one to <literal>avoid_error_require_once.php</literal>, we have: - <example> - <title>foolib.inc (fixed)</title> - <programlisting role="php"> -<![CDATA[ -... -require_once("utils.inc"); -function showVar($var) -{ -... -]]> - </programlisting> - </example> - <example> - <title>avoid_error_require_once.php</title> - <programlisting role="php"> -<![CDATA[ -... -require_once("foolib.inc"); -require_once("utils.inc"); -$foo = array("1",array("complex","quaternion")); -... -]]> - </programlisting> - </example> - And when running the latter, the output will be (using PHP 4.0.1pl2): - <informalexample> - <screen> -<![CDATA[ -GLOBALS ARE NICE -this is requiring globals.inc again which is also -required in foolib.inc -Running goodTea: Oolong tea tastes good! -Printing foo: -Array -( - [0] => 1 - [1] => Array - ( - [0] => complex - [1] => quaternion - ) +testreturns.php +<?php -) +$foo = include 'return.php'; + +echo $foo; // stampa 'PHP' + +$bar = include 'noreturn.php'; + +echo $bar; // stampa 1 + +?> ]]> - </screen> - </informalexample> - </para> - <para> - Also note that, analogous to the behavior of the - <literal>#include</literal> of the C preprocessor, this statement - acts at "compile time", e.g. when the script is parsed and before it - is executed, and should not be used for parts of the script that need - to be inserted dynamically during its execution. You should use - <function>include_once</function> or <function>include</function> - for that purpose. + </programlisting> + </example> </para> + <simpara> + <literal>$bar</literal> ha valore <literal>1</literal> perchè l'inclusione + è stata eseguita con successo. Notare la differenza tra gli esempi sopra. Il primo usa + <function>return</function> all'interno di un file incluso mentre l'altro no. + Pochi altri modi di "includere" file in variabili sono con + <function>fopen</function>, <function>file</function> o usando + <function>include</function> insieme con + <link linkend="ref.outcontrol">Output Control Functions</link>. + </simpara> + + <simpara> + Vedere anche <function>require</function>, <function>require_once</function>, + <function>include_once</function>, <function>readfile</function>, + <function>virtual</function>, e + <link linkend="ini.include-path">include_path</link>. + </simpara> + +</sect1> + + <sect1 id="function.require-once"> + <title><function>require_once</function></title> <para> - For more examples on using <function>require_once</function> and - <function>include_once</function>, look at the PEAR code included in - the latest PHP source code distributions. + L'istruzione <function>require_once</function> include e valuta + il file specificato durante l'esecuzione dello script. + È un comportamento simile all'istruzione <function>require</function>, + con la sola differenza che se il codice di un file è stato + già incluso, esso non sarà incluso nuovamente. Vedere la documentazione di + <function>require</function> per maggiori informazioni su come funziona + quest'istruzione. + </para> + <para> + <function>require_once</function> dovrebbe essere usato nei casi dove + lo stesso file potrebbe essere incluso e valutato più di una volta durante + una particolare esecuzione di uno script, e volete essere sicuri che esso sia + incluso esattamente una volta per evitare problemi con la ridefinizione di funzioni, + riassegnazione di valori a variabili, etc. + </para> + <para> + Per esempi sull'utilizzo di <function>require_once</function> e + <function>include_once</function>, consultare il codice + <ulink url="&url.php.pear;">PEAR</ulink> incluso + nell'ultima distribuzione del codice sorgente di PHP. </para> + <note> + <para> + <function>require_once</function> è stato aggiunto in PHP 4.0.1pl2 + </para> + </note> <para> - See also: <function>require</function>, + Vedere anche: <function>require</function>, <function>include</function>, <function>include_once</function>, <function>get_required_files</function>, <function>get_included_files</function>, <function>readfile</function>, - and <function>virtual</function>. + e <function>virtual</function>. </para> </sect1> - <sect1 id="function.include-once"> + <sect1 id="function.include-once"> <title><function>include_once</function></title> <para> - The <function>include_once</function> statement includes and evaluates - the specified file during the execution of the script. - This is a behavior similar to the <function>include</function> statement, - with the important difference that if the code from a file has already - been included, it will not be included again. - </para> - <para> - As mentioned in the <function>require_once</function> description, the - <function>include_once</function> should be used in the cases in which - the same file might be included and evaluated more than once during a - particular execution of a script, and you want to be sure that it is - included exactly once to avoid problems with function redefinitions, - variable value reassignments, etc. - </para> - <para> - For more examples on using <function>require_once</function> and - <function>include_once</function>, look at the PEAR code included in - the latest PHP source code distributions. - </para> - <para> - <function>include_once</function> was added in PHP 4.0.1pl2 + L'istruzione <function>include_once</function> include e valuta + il file specificato durante l'esecuzione dello script. + È un comportamento simile all'istruzione <function>include</function>, + con la sola differenza che se il codice di un file è stato + già incluso, esso non sarà incluso nuovamente. Come suggerisce il nome, + esso sarà incluso solo una volta. + </para> + <para> + <function>include_once</function> dovrebbe essere usato nei casi dove + lo stesso file potrebbe essere incluso e valutato più di una volta durante + una particolare esecuzione di uno script, e volete essere sicuri che esso sia + incluso esattamente una volta per evitare problemi con la ridefinizione di funzioni, + riassegnazione di valori a variabili, etc. + </para> + <para> + Per maggiori esempi sull'utilizzo di <function>require_once</function> e + <function>include_once</function>, consultare il codice + <ulink url="&url.php.pear;">PEAR</ulink> incluso + nell'ultima distribuzione del codice sorgente di PHP. </para> + <note> + <para> + <function>include_once</function> è stato aggiunto in PHP 4.0.1pl2 + </para> + </note> <para> - See also: <function>require</function>, - <function>include</function>, <function>require_once</function>, + Vedere anche <function>include</function>, + <function>require</function>, <function>require_once</function>, <function>get_required_files</function>, <function>get_included_files</function>, <function>readfile</function>, - and <function>virtual</function>. + e <function>virtual</function>. </para> </sect1>
Index: phpdoc/it/language/control-structures.xml diff -u phpdoc/it/language/control-structures.xml:1.10 phpdoc/it/language/control-structures.xml:1.11 --- phpdoc/it/language/control-structures.xml:1.10 Tue Dec 18 13:00:12 2001 +++ phpdoc/it/language/control-structures.xml Mon Mar 18 14:00:05 2002 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.45 Maintainer: spisto Status: working --> +<!-- EN-Revision: 1.55 Maintainer: spisto Status: working --> <chapter id="control-structures"> <title>Strutture di controllo</title> @@ -17,7 +17,7 @@ <sect1 id="control-structures.if"> <title><literal>if</literal></title> <para> - Il costrutto <literal>if</literal> è uno delle più importanti + Il costrutto <literal>if</literal> è una delle più importanti caratteristiche di qualsiasi linguaggio, incluso PHP. Permette l'esecuzione condizionata di frammenti di codice. La struttura di controllo <literal>if</literal> di PHP è simile a quella del linguaggio C: @@ -31,14 +31,18 @@ </informalexample> </para> <simpara> - Come descritto nel capitolo sulle espressioni, expr restituirà il - suo valore di verità. Se <replaceable>espressione</replaceable> - è &true;, PHP eseguirà l'espressione, se - è &false;, la ignorerà. + Come descritto nella <link linkend="language.expressions">sezione sulle + espressioni</link>, <replaceable>espressione</replaceable> restiruirà il suo + valore booleano. Se <replaceable>espressione</replaceable> vale &true;, + PHP eseguirà <replaceable>istruzione</replaceable>, e se essa vale + &false; - la ignorerà. Più informazioni riguardo i valori valutati + &false; possono essere trovati nella sezione <link + linkend="language.types.boolean.casting">'Conversione in booleano'</link> + . </simpara> <para> - L'esempio che segue visualizzerà <computeroutput>a è maggiore - di b</computeroutput> se <replaceable>$a</replaceable> sarà maggiore + L'esempio che segue visualizzerà <computeroutput>a è maggiore + di b</computeroutput> se <replaceable>$a</replaceable> sarà maggiore di <replaceable>$b</replaceable>: <informalexample> <programlisting role="php"> @@ -52,17 +56,17 @@ <para> Spesso sarà necessario eseguire più di una istruzione condizionale. Naturalmente non è necessario, utilizzare una singola clausola - <literal>if</literal> per ciascuna istruzione. Si possono raggruppare diverse istruzioni - in un singolo gruppo di istruzioni. Per esemipo, il codice che segue - visualizzerà <computeroutput>a is bigger than b</computeroutput> - se <replaceable>$a</replaceable> è maggiore di <replaceable>$b</replaceable>, - e successivamente assegnerà il valore della variabile <replaceable>$a</replaceable> + <literal>if</literal> per ciascuna istruzione. Si possono raggruppare diverse istruzioni + in un singolo gruppo di istruzioni. Per esempio, il codice che segue + visualizzerà <computeroutput>a è maggiore di b</computeroutput> + se <replaceable>$a</replaceable> è maggiore di <replaceable>$b</replaceable>, + e successivamente assegnerà il valore della variabile <replaceable>$a</replaceable> alla variabile <replaceable>$b</replaceable>: <informalexample> <programlisting role="php"> <![CDATA[ if ($a > $b) { - print "a è maggiore dib"; + print "a è maggiore di b"; $b = $a; } ]]> @@ -70,9 +74,9 @@ </informalexample> </para> <simpara> - Si possono annidare indefinitamente istruzioni - <literal>if</literal>, la qual cosa fornisce piena - flessibilità per l'esecuzione di istruzioni condizionali in differenti punti del + Si possono annidare indefinitamente istruzioni + <literal>if</literal>, la qual cosa fornisce piena + flessibilità per l'esecuzione di istruzioni condizionali in diversi punti del programma. </simpara> </sect1> @@ -81,14 +85,14 @@ <title><literal>else</literal></title> <para> Spesso è necessario eseguire un'istruzione se una proposizione è vera - e un'altra istruzione se la proposizione è falsa. Per questo - si usa la clausola <literal>else</literal>. <literal>else</literal> + e un'altra istruzione se la proposizione è falsa. Per questo + si usa la clausola <literal>else</literal>. <literal>else</literal> estende il costrutto <literal>if</literal> aggiungendo la possibilità - di eseguire un'istruzione se l'espressione nel ramo <literal>if</literal> - è &false;. L'esempio che segue - visualizzerà <computeroutput>a è maggiore di - b</computeroutput> se <replaceable>$a</replaceable> è maggiore di - <replaceable>$b</replaceable> e <computeroutput>a NON è maggiore + di eseguire un'istruzione se l'espressione nel ramo <literal>if</literal> + è &false;. L'esempio che segue + visualizzerà <computeroutput>a è maggiore + di b</computeroutput> se <replaceable>$a</replaceable> è maggiore di + <replaceable>$b</replaceable> e <computeroutput>a NON è maggiore di b</computeroutput> altrimenti: <informalexample> <programlisting role="php"> @@ -101,10 +105,10 @@ ]]> </programlisting> </informalexample> - + Il ramo <literal>else</literal> viene eseguito solo se l'espressione - nel ramo <literal>if</literal> è - &false;, e, nel caso ci fossero delle clausole + nel ramo <literal>if</literal> è + &false;, e, nel caso ci fossero delle clausole <literal>elseif</literal>, solamente se le espressioni in esse contenute fossero anch'esse &false; (vedere <link linkend="control-structures.elseif">elseif</link>). @@ -116,16 +120,16 @@ <title><literal>elseif</literal></title> <para> <literal>elseif</literal>, come è facile intuire, è una combinazione - di <literal>if</literal> and <literal>else</literal>. Analogamente a + di <literal>if</literal> ed <literal>else</literal>. Analogamente ad <literal>else</literal>, estende <literal>if</literal> aggiungendo la possibilità di eseguire un'altra istruzione nel caso - in cui l'espressione contenuta nel ramo <literal>if</literal> - sia &false;. Però, a differenza - di <literal>else</literal>, si eseguirà l'istruzione alternativa - solamente se l'espressione contenuta nel ramo <literal>elseif</literal> - sarà &true;. L'esempio - che segue, visualizzerà <computeroutput>a è maggiore di - b</computeroutput>, <computeroutput>a è uguale a b</computeroutput> + in cui l'espressione contenuta nel ramo <literal>if</literal> + sia &false;. Però, a differenza + di <literal>else</literal>, si eseguirà l'istruzione alternativa + solamente se l'espressione contenuta nel ramo <literal>elseif</literal> + sarà &true;. L'esempio + che segue, visualizzerà <computeroutput>a è maggiore di + b</computeroutput>, <computeroutput>a è uguale a b</computeroutput> oppure <computeroutput>a è minore di b</computeroutput>: <informalexample> <programlisting role="php"> @@ -143,21 +147,21 @@ </para> <simpara> Nel medesimo blocco <literal>if</literal> possono essere presenti - più d'una clausola <literal>elseif</literal>. L'istruzione del - primo ramo <literal>elseif</literal> la cui espressione - sia &true; verrà eseguito. In PHP è possibile - scrivere 'else if' (due parole) e il significato sarà - lo stesso di 'elseif' (una sola parola). Il significato sintattico + più di una clausola <literal>elseif</literal>. Verrà eseguita + l'istruzione del primo ramo <literal>elseif</literal> la cui espressione + sia &true;. In PHP è possibile + scrivere 'else if' (due parole) e il significato sarà + lo stesso di 'elseif' (una sola parola). Il significato sintattico è leggermente differente (se si ha familiarità con il linguaggio C, esso ha lo stesso - comportamento) però al lato pratico l'effetto è + comportamento) però al lato pratico l'effetto è il medesimo. </simpara> <simpara> - L'istruzione di un ramo <literal>elseif</literal> si eseguirà solo se l'espressione del - ramo <literal>if</literal> e le espressioni dei - rami <literal>elseif</literal> precedenti sono + L'istruzione di un ramo <literal>elseif</literal> verrà eseguita solo se l'espressione del + ramo <literal>if</literal> e le espressioni dei + rami <literal>elseif</literal> precedenti sono &false;, e se l'espressione - del ramo <literal>elseif</literal> è + del ramo <literal>elseif</literal> è &true;. </simpara> </sect1> @@ -165,11 +169,11 @@ <sect1 id="control-structures.alternative-syntax"> <title>Sintassi alternativa per le strutture di controllo</title> <para> - PHP offre una sintassi alternatica per alcune delle sue strutture di controllo; + PHP offre una sintassi alternativa per alcune delle sue strutture di controllo; vale a dire, <literal>if</literal>, <literal>while</literal>, <literal>for</literal>, <literal>foreach</literal> e <literal>switch</literal>. - Fondamentalmente la sintassi alternativa consiste nel sostituire + Fondamentalmente la sintassi alternativa consiste nel sostituire la prima parentesi graffa con il carattere "duepunti" (:) e la seconda parentesi graffa con <literal>endif;</literal>, <literal>endwhile;</literal>, <literal>endfor;</literal>, <literal>endforeach;</literal>, oppure @@ -178,21 +182,21 @@ <programlisting role="php"> <![CDATA[ <?php if ($a == 5): ?> -A é maggiore di 5 +a è uguale a 5 <?php endif; ?> ]]> </programlisting> </informalexample> </para> <simpara> - Nell'esempio precedente, il blocco HTML "A = 5" è incluso nel ramo - <literal>if</literal> scritto con utilizzando la sintassi alternativa. + Nell'esempio precedente, il blocco HTML "a è uguale a 5" è incluso nel ramo + <literal>if</literal> scritto utilizzando la sintassi alternativa. Il blocco HTML verrà visualizzato solamente se $a è uguale a 5. </simpara> <para> - La sintassi alternativa si applica anche a <literal>else</literal> e - <literal>elseif</literal>. Nell'esempio che segue si mostra come utilizzare la sintassi alternativa - nel caso di un <literal>if</literal> con <literal>elseif</literal> e + La sintassi alternativa si applica anche ad <literal>else</literal> ed + <literal>elseif</literal>. Nell'esempio che segue si mostra come utilizzare la sintassi alternativa + nel caso di un <literal>if</literal> con <literal>elseif</literal> ed <literal>else</literal>: <informalexample> <programlisting role="php"> @@ -204,7 +208,7 @@ print "a è uguale a 6"; print "!!!"; else: - print "a non è uguale nè a 5 nè a 6"; + print "a non è nè 5 nè 6"; endif; ]]> </programlisting> @@ -221,8 +225,8 @@ <title><literal>while</literal></title> <para> Il ciclo <literal>while</literal> è la forma di ciclo più semplice - tra quelle possibili in PHP. Si comporta come la sua controparte nel linguaggio C. - La forma basica di un ciclo <literal>while</literal> è la seguente: + tra quelle possibili in PHP. Si comporta come la sua controparte nel linguaggio C. + La forma di base di un ciclo <literal>while</literal> è la seguente: <informalexample> <programlisting> <![CDATA[ @@ -232,22 +236,22 @@ </informalexample> </para> <simpara> - Il significato di un ciclo <literal>while</literal> è semplice. - Istruisce l'interprete PHP perchè esegua l'istruzione (o le istruzioni) - in esso racchiuse, ripetutamente, fintanto che l'espressionbe contenuta + Il significato di un ciclo <literal>while</literal> è semplice. + Istruisce l'interprete PHP perchè esegua l'istruzione (o le istruzioni) + in esso racchiuse, ripetutamente, fintanto che l'espressione contenuta nella clausola <literal>while</literal> ha valore &true;. - Il valore dell'espressione viene verificato ogni volta che il ciclo + Il valore dell'espressione viene verificato ogni volta che il ciclo si ripete (iterazione), così che anche se il valore dell'espressione cambia durante - l'esecuzione dell'istruzione, il ciclo non termina fino + l'esecuzione dell'istruzione, il ciclo non termina fino all'iterazione successiva. Ovviamente, se l'espressione nella clausola <literal>while</literal> ha valore - &false; dall'inizio, l'istruzione racchiusa nel blocco non verrà eseguita nemmeno + &false; dall'inizio, l'istruzione racchiusa nel blocco non verrà eseguita nemmeno una volta. </simpara> <para> - Come nel caso della struttura di controllo <literal>if</literal>, si possono raggruppare - più istruzioni nello medesimo ciclo <literal>while</literal> - racchiudendo le istruzioni in parentesi grafa, oppure + Come nel caso della struttura di controllo <literal>if</literal>, si possono raggruppare + più istruzioni nello medesimo ciclo <literal>while</literal> + racchiudendo le istruzioni in parentesi graffa, oppure utilizzando la sintassi alternativa: <informalexample> <programlisting> @@ -258,7 +262,7 @@ </informalexample> </para> <para> - Gli esempi seguenti sono identici e entrambi visualizzano i numeri da + Gli esempi seguenti sono identici e entrambi visualizzano i numeri da 1 a 10: <informalexample> <programlisting> @@ -268,8 +272,8 @@ $i = 1; while ($i <= 10) { print $i++; /* Il valore visualizzato è il valore della - variabile $i prima dell'incremento - (post-increment) */ + variabile $i prima dell'incremento + (post-incremento) */ } /* esempio 2 */ @@ -292,12 +296,12 @@ <literal>while</literal>, con l'unica differenza che il valore dell'espressione viene controllato alla fine di ogni iterazione anzichè all'inizio. La differenza più importante rispetto a <literal>while</literal> è che - la prima iterazione di un blocco <literal>do..while</literal>verrà - sempre eseguita (il valore dell'espressione viene controllato alla fine - del ciclo), mentre non è necessariamente vero in un - ciclo <literal>while</literal> questo (il valore dell'espressione viene + la prima iterazione di un blocco <literal>do..while</literal> verrà + sempre eseguita (il valore dell'espressione viene controllato alla fine + del ciclo), mentre non sarà necessariamente eseguito in un + ciclo <literal>while</literal> (il valore dell'espressione viene controllato all'inizio del ciclo, e se tale valore è - &false; dall'inizio, l'esecuzione del ciclo + &false; dall'inizio, l'esecuzione del ciclo termina immediatamente). </simpara> <para> @@ -317,13 +321,13 @@ <simpara> Il ciclo precedente verrà eseguito un'unica volta, dal momento che alla prima iterazione, quando si controlla l'espressione, il suo valore sarà - &false; ($i non è maggiore di 0) e il ciclo di + &false; ($i non è maggiore di 0) e il ciclo di esecuzioni, termina. </simpara> <para> - Chi ha utilizzato il linguaggio C conosce probabilmente un'altro modo di utilizzare - il ciclo <literal>do..while</literal>, che permette di terminare l'esecuzione - delle istruzioni durante l'esecuzione stessa, utilizzando + Chi ha utilizzato il linguaggio C conosce probabilmente un'altro modo di utilizzare + il ciclo <literal>do..while</literal>, che permette di terminare l'esecuzione + delle istruzioni durante l'esecuzione stessa, utilizzando <literal>do..while</literal>(0), e usando l'istruzione <link linkend="control-structures.break"><literal>break</literal></link>. Il codice che segue esemplifica questa possibilità: @@ -350,7 +354,7 @@ </para> <simpara> Non vi preoccupate se l'esempio non è sufficientemente chiaro. - Si possono scrivere ottimi programmi PHP anche senza far ricorso a questa + Si possono scrivere ottimi programmi PHP anche senza far ricorso a questa 'possibilità'. </simpara> </sect1> @@ -364,36 +368,36 @@ <informalexample> <programlisting> <![CDATA[ -for (expr1; expr2; expr3) istruzione +for (espressione1; espressione2; espressione3) istruzione ]]> </programlisting> </informalexample> </para> <simpara> - Il valore della prima espressione (<replaceable>expr1</replaceable>) viene - verificato (eseguito) una sola volta incondizionatamente all'inizio del + Il valore della prima espressione (<replaceable>espressione1</replaceable>) viene + verificato (eseguito) una sola volta incondizionatamente all'inizio del ciclo. </simpara> <simpara> - Ad ogni iterazione, - si controlla il valore di <replaceable>expr2</replaceable>. Se è - &true;, il ciclo prosegue e viene eseguita - l'istruzione (o le istruzioni) contenuta nel blocco; + Ad ogni iterazione, + si controlla il valore di <replaceable>espressione2</replaceable>. Se è + &true;, il ciclo prosegue e viene eseguita + l'istruzione (o le istruzioni) contenuta nel blocco; se è &false;, l'esecuzione del ciclo termina. </simpara> <simpara> - Al termine di ogni iterazione, <replaceable>expr3</replaceable> si verifica - il valore di <replaceable>expr3</replaceable>. + Al termine di ogni iterazione, si verifica (si esegue) + il valore di <replaceable>espressione3</replaceable>. </simpara> <simpara> - Le due espressioni possono anche non essere presenti. - Se non esiste <replaceable>expr2</replaceable> significa che il ciclo deve - essere eseguito indefinitamente (PHP considera implicitamente che il - suo valore è &true;, come in C). Questa possibilità in fondo non è + Le due espressioni possono anche non essere presenti. + Se non esiste <replaceable>espressione2</replaceable> significa che il ciclo deve + essere eseguito indefinitamente (PHP considera implicitamente che il + suo valore è &true;, come in C). Questa possibilità in fondo non è utile come può sembrare perchè obbliga a terminare il ciclo utilizzando - l'istruzione <link + l'istruzione <link linkend="control-structures.break"><literal>break</literal></link> - invece di utilizzare le espressioni di verità del ciclo <literal>for</literal> + invece di utilizzare le espressioni booleane del ciclo <literal>for</literal> . </simpara> <para> @@ -402,13 +406,13 @@ <informalexample> <programlisting role="php"> <![CDATA[ -/* example 1 */ +/* esempio 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } -/* example 2 */ +/* esempio 2 */ for ($i = 1;;$i++) { if ($i > 10) { @@ -417,7 +421,7 @@ print $i; } -/* example 3 */ +/* esempio 3 */ $i = 1; for (;;) { @@ -428,7 +432,7 @@ $i++; } -/* example 4 */ +/* esempio 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; ]]> @@ -436,30 +440,30 @@ </informalexample> </para> <simpara> - Naturalmente il primo esempio sembra il migliore (o - forse il quarto), ma l'uso del + Naturalmente il primo esempio sembra il migliore (o + forse il quarto), ma l'uso del ciclo <literal>for</literal> senza espressioni può essere utile in molti casi. </simpara> <para> - PHP offre una sintassi alternativa (con i "punto e virgola") per i + PHP offre una sintassi alternativa (con i "punto e virgola") per i cicli <literal>for</literal>. <informalexample> <programlisting> <![CDATA[ -for (expr1; expr2; expr3): istruzione; ...; endfor; +for (espressione1; espressione2; espressione3): istruzione; ...; endfor; ]]> </programlisting> </informalexample> </para> <para> - Alcuni linguaggi permettono l'uso della struttura di controllo <literal>foreach</literal> per - attraversare un array o una tabella hash. PHP 3 non premette l'uso di tale ciclo mentre PHP 4 sì - (vedere <link - linkend="control-structures.foreach">foreach</link>). In PHP 3 è + Alcuni linguaggi permettono l'uso della struttura di controllo <literal>foreach</literal> per + attraversare un array o una tabella hash. PHP 3 non premette l'uso di tale ciclo mentre PHP 4 si + (vedere <link + linkend="control-structures.foreach">foreach</link>). In PHP 3 è possibile combinare <link linkend="control-structures.while">while</link> con la funzione <function>list</function> e <function>each</function> - per ottenere la stessa funzionalià. Si veda la documentazione si queste funzioni + per ottenere la stessa funzionalià. Si veda la documentazione di queste funzioni per ulteriori esempi. </para> @@ -469,24 +473,24 @@ <title><literal>foreach</literal></title> <para> PHP 4 (non PHP 3) permette l'uso della struttura di controllo <literal>foreach</literal>, - alla stessa maniera del linguaggio Perl e altri. - <literal>foreach</literal> offre una maniera semplice di attraversare un array. Esistono due possibili notazioni sintattiche; la seconda è + alla stessa maniera del linguaggio Perl e altri. Ciò semplicemente fornisce + una facile metodo per attraversare un array. Esistono due possibili notazioni sintattiche; la seconda è un'utile estensione della prima: <informalexample> <programlisting> <![CDATA[ foreach(array_expression as $value) istruzione -foreach(array_expression as $key => $value) istruzione +foreach(array_expression as $key => $value) istruzione ]]> </programlisting> </informalexample> </para> <simpara> - La prima attraversa l'array dato da <literal>array_expression</literal>. - Ad ogni ciclo, si assegna il valore dell'elemento corrente a <literal>$value</literal> - e il puntatore interno avanza di una posizione (in modo tale che - al ciclo successivo l'elemento corrente sará il successivo elemento - dell'array). + La prima attraversa l'array dato da + <literal>array_expression</literal>. Ad ogni ciclo, si assegna il valore + dell'elemento corrente a <literal>$value</literal> e + il puntatore interno avanza di una posizione (in modo tale che al ciclo successivo + l'elemento corrente sarà il successivo elemento dell'array). </simpara> <simpara> La seconda esegue lo stesso ciclo con la differenza che il @@ -496,7 +500,7 @@ <para> <note> <para> - All'inizio dell'esecuzione di un ciclo <literal>foreach</literal> + All'inizio dell'esecuzione di un ciclo <literal>foreach</literal> il puntatore interno viene automaticamente posizionato nella prima posizione. Questo significa che non è necessario utilizzare la funzione <function>reset</function> prima di un ciclo <literal>foreach</literal> @@ -508,9 +512,9 @@ <note> <para> È importante notare che <literal>foreach</literal> opera su una copia - dell'array, pertanto il puntatore dell'array originale non viene - modificato come accade utilizzando la funzione <function>each</function> - e le modifiche agli elementi dell'array non + dell'array, non sull'array stesso, pertanto il puntatore dell'array originale + non viene modificato come accade utilizzando la funzione <function>each</function> + e le modifiche agli elementi dell'array non appaiono nell'array originale. </para> </note> @@ -533,7 +537,7 @@ } foreach ($arr as $value) { - echo "Valore: $value<br>\n"; + echo "Valore: $value<br>\n"; } ]]> </programlisting> @@ -544,53 +548,54 @@ <![CDATA[ reset ($arr); while (list($key, $value) = each ($arr)) { - echo "Key: $key; Valore: $value<br>\n"; + echo "Chiave: $key; Valore: $value<br>\n"; } -foreach ($arr as $key => $value) { - echo "Key: $key; Valore: $value<br>\n"; +foreach ($arr as $key => $value) { + echo "Chiave: $key; Valore: $value<br>\n"; } ]]> </programlisting> </informalexample> </para> <para> - Di seguito, altri esempi per mostrare possibili utilizzi: + Di seguito, altri esempi per mostrare possibili utilizzi: <informalexample> <programlisting role="php"> <![CDATA[ -/* foreach example 1: value only */ +/* esempio 1 foreach: solo il valore */ $a = array (1, 2, 3, 17); foreach ($a as $v) { - print "Valore corrente of \$a: $v.\n"; + print "Valore corrente di \$a: $v.\n"; } -/* foreach example 2: value (with key printed for illustration) */ +/* esempio 2 foreach: valore (con la chiave stampata) */ $a = array (1, 2, 3, 17); -$i = 0; /* for illustrative purposes only */ +$i = 0; /* solo per un proposito illustrativo */ foreach($a as $v) { print "\$a[$i] => $v.\n"; + $i++; } -/* foreach example 3: key and value */ +/* esempio 3 foreach: chiave e valore */ $a = array ( - "one" => 1, - "two" => 2, - "three" => 3, - "seventeen" => 17 + "uno" => 1, + "due" => 2, + "tre" => 3, + "diciassette" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } -/* foreach example 4: multi-dimensional arrays */ +/* esempio 4 foreach: array multidimensionali */ $a[0][0] = "a"; $a[0][1] = "b"; @@ -603,7 +608,7 @@ } } -/* foreach example 5: dynamic arrays */ +/* esempio 5 foreach: array dinamici */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; @@ -624,17 +629,17 @@ </simpara> <simpara> <literal>break</literal> accetta un argomento opzionale che definisce, - nel caso di cicli annidati, il livello del ciclo che è da + nel caso di cicli annidati, il livello del ciclo che è da interrompere. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ -$arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); +$arr = array ('uno', 'due', 'tre', 'quattro', 'stop', 'cinque'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { - break; /* Si può anche usare 'break 1;'. */ + break; /* Qui si può anche usare 'break 1;'. */ } echo "$val<br>\n"; } @@ -664,20 +669,20 @@ <title><literal>continue</literal></title> <simpara> <literal>continue</literal> si utilizza per interrompere l'esecuzione - del ciclo corrente e continuare con l'esecuzione + del ciclo corrente e continuare con l'esecuzione all'inizio del ciclo successivo. </simpara> <simpara> <literal>continue</literal> accetta un argomento numerico opzionale che definisce, nel caso di cicli annidati, il numero di cicli da interrompere - e a cui iniziare l'esecuzione dell'iterazione successiva. + e da cui iniziare l'esecuzione dell'iterazione successiva. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ while (list ($key, $value) = each ($arr)) { - if (!($key % 2)) { // skip odd members + if (!($key % 2)) { // salta odd members continue; } do_something_odd ($value); @@ -685,16 +690,16 @@ $i = 0; while ($i++ < 5) { - echo "Outer<br>\n"; + echo "Esterno<br>\n"; while (1) { - echo " Middle<br>\n"; + echo " Centrale<br>\n"; while (1) { - echo " Inner<br>\n"; + echo " Interno<br>\n"; continue 3; } - echo "This never gets output.<br>\n"; + echo "Questo non sarà mai stampato.<br>\n"; } - echo "Neither does this.<br>\n"; + echo "Nemmeno questo.<br>\n"; } ]]> </programlisting> @@ -705,10 +710,10 @@ <sect1 id="control-structures.switch"> <title><literal>switch</literal></title> <simpara> - <literal>switch</literal> è simile a una serie di - IF sulla stessa espressione. In molti casi può essere - necessario confrontare una variabile (o espressione) con differenti - valori ed eseguire un differente blocco di istruzioni a seconda + <literal>switch</literal> è simile a una serie di + if sulla stessa espressione. In molti casi può essere + necessario confrontare una variabile (o espressione) con + differenti valori ed eseguire un differente blocco di istruzioni a seconda del valore di detta variabile. Questo è esattamente quello che fa la struttura di controllo <literal>switch</literal>. </simpara> @@ -721,24 +726,24 @@ <programlisting role="php"> <![CDATA[ if ($i == 0) { - print "i equals 0"; + print "i è uguale a 0"; } if ($i == 1) { - print "i equals 1"; + print "i è uguale a 1"; } if ($i == 2) { - print "i equals 2"; + print "i è uguale a 2"; } switch ($i) { case 0: - print "i equals 0"; + print "i è uguale a 0"; break; case 1: - print "i equals 1"; + print "i è uguale a 1"; break; case 2: - print "i equals 2"; + print "i è uguale a 2"; break; } ]]> @@ -749,15 +754,15 @@ È importante comprendere esattamente come viene eseguita la clausola <literal>switch</literal> per evitare errori. Un'istruzione <literal>switch</literal> esegue linea dopo linea - le istruzioni in essa contenuta. - Solamente quando incontra una clausola <literal>case</literal> + le istruzioni in essa contenuta. All'inizio non viene eseguito + alcun codice. Solamente quando incontra una clausola <literal>case</literal> il cui valore è uguale al valore della viariabile, PHP inizia ad - eseguire le istruzioni contenute nel blocco case. - PHP continua l'esecuzione delle istruzioni fino alla termine del - blocco <literal>switch</literal>, o quando incontra un'istruzione + eseguire le istruzioni contenute nel blocco <literal>case</literal>. + PHP continua l'esecuzione delle istruzioni fino alla termine del + blocco <literal>switch</literal>, o quando incontra un'istruzione <literal>break</literal>. Se non esiste alcuna istruzione <literal>break</literal> al termine di un blocco case - PHP continuerà l'esecuzione le istruzioni del blocco case successivo. + PHP continuerà l'esecuzione delle istruzioni del blocco case successivo. Per esempio: <informalexample> <programlisting role="php"> @@ -779,15 +784,15 @@ istruzioni contenute nei blocchi case. Se $i è uguale a 1, PHP eseguirà le istruzioni degli ultimi due blocchi case e solamente se $i è uguale a 2 otterremo il risultato voluto - e si visualizzerà solo '$i è uguale a 2'. - Pertanto è importante non dimenticare l'istruzione <literal>break</literal> + e si visualizzerà solo '$i è uguale a 2'. Pertanto + è importante non dimenticare l'istruzione <literal>break</literal> (anche se in alcuni casi potrà essere necessario non utilizzarla). </simpara> <simpara> In un'istruzione <literal>switch</literal>, la condizione in parentesi viene valutata una sola volta e il risultato viene confrontato con - ciascun ramo <literal>case</literal>. Utilizzando <literal>elseif</literal>, - la ondizione viene valutata una seconda volta. Se tale condizione è più + ciascun ramo <literal>case</literal>. Utilizzando <literal>elseif</literal>, + la condizione viene valutata una seconda volta. Se tale condizione è più complessa di un semplice confronto e/o è in un ciclo piuttosto pesante, l'uso di <literal>switch</literal> dovrebbe garantire un minor tempo di esecuzione. </simpara> @@ -801,10 +806,10 @@ case 0: case 1: case 2: - print "i is less than 3 but not negative"; + print "i è minore di 3 ma non negativo"; break; case 3: - print "i is 3"; + print "i è 3"; } ]]> </programlisting> @@ -812,8 +817,8 @@ </para> <para> Un blocco case speciale è il il blocco case di default. - Uguagli tutte le condizioni non uguagliate nei blocchi case - precedenti e dev'essere l'ultimo blocco <literal>case</literal> statement. Per esempio: + Uguaglia tutte le condizioni non uguagliate nei blocchi case precedenti + e dev'essere l'ultimo blocco <literal>case</literal>. Per esempio: <informalexample> <programlisting role="php"> <![CDATA[ @@ -828,21 +833,21 @@ print "i è uguale a 2"; break; default: - print "i non è ugluale a 0, 1 o 2"; + print "i è diverso da 0, 1 o 2"; } ]]> </programlisting> </informalexample> </para> <para> - L'espressione in un ramo case <literal>case</literal> può essere + L'espressione in un ramo <literal>case</literal> può essere qualsiasi espressione il cui valore sarà di tipo intero, decimale, numerico e stringa. Array e oggetti (objects) non sono ammessi a meno che non siano dereferenziati a un tipo di dato semplice tra quelli precedentemente elencati. </para> <para> Come per altre strutture di controllo è possibile utilizzare una sintassi - alternativa. Si veda + alternativa. Si veda <link linkend="control-structures.alternative-syntax">Sintassi alternativa per le strutture di controllo</link> per ulteriori esempi. <informalexample> @@ -859,7 +864,7 @@ print "i è uguale a 2"; break; default: - print "i non è uguale a 0, 1 o 2"; + print "i è diverso da 0, 1 o 2"; endswitch; ]]> </programlisting> @@ -872,8 +877,8 @@ <para> Il costrutto <literal>declare</literal> si usa per definire direttive di esecuzione per blocchi di istruzioni. - La sintassi è simile alla - sintassi di altre strutture di controllo: + La sintassi è simile alla sintassi + di altre strutture di controllo: <informalexample> <programlisting> <![CDATA[ @@ -886,48 +891,48 @@ La sezione <literal>direttiva</literal> permette di impostare il comportamento del blocco <literal>declare</literal> . - Attualemente è riconosciuta una sola direttiva: la + Attualmente è riconosciuta una sola direttiva: la direttiva <literal>ticks</literal>. (Fare riferimento più in basso per ulteriori informazioni relative alla - direttiva + direttiva <link linkend="control-structures.declare.ticks">ticks</link>) </para> <para> - La parte <literal>istruzione</literal> del - blocco <literal>declare</literal> verrà eseguita. Come + Verrà eseguita la parte <literal>istruzione</literal> del + blocco <literal>declare</literal> - come verrà eseguita e quali effetti collaterali emergeranno durante l'esecuzione potrà dipendere dalla direttiva impostata nel blocco <literal>direttiva</literal>. </para> <sect2 id="control-structures.declare.ticks"> <title>Ticks</title> - <para>A tick is an event that occurs for every - <replaceable>N</replaceable> low-level statements executed - by the parser within the <literal>declare</literal> block. - The value for <replaceable>N</replaceable> is specified - using <literal>ticks=<replaceable>N</replaceable></literal> - within the <literal>declare</literal> blocks's - <literal>directive</literal> section. + <para>Un tick è un evento che si verifica per ogni + <replaceable>N</replaceable> istruzioni di basso livello eseguite + dal parser all'interno del blocco <literal>declare</literal>. + Il valore per <replaceable>N</replaceable> viene specificato + usando <literal>ticks=<replaceable>N</replaceable></literal> + all'interno della sezione <literal>direttiva</literal> del blocco + <literal>declare</literal>. </para> <para> - The event(s) that occurs on each tick is specified using the - <function>register_tick_function</function>. See the example - below for more details. Note that more than one event can occur - for each tick. + L'evento (o gli eventi) che si verifica su ogni tick è specificato usando + <function>register_tick_function</function>. Vedere l'esempio + più in basso per ulteriori dettagli. Notare che può verificarsi più di un evento + per ogni tick. </para> <para> <example> - <title>Profile a section of PHP code</title> + <title>Segue una sezione di codice PHP</title> <programlisting role="php"> <![CDATA[ <pre> <?php -// A function that records the time when it is called +// Una funzione che registra il tempo quando viene chiamata function profile ($dump = FALSE) { static $profile; - // Return the times stored in profile, then erase it + // Restituisce il tempo immagazinato in $profile, successivamente lo cancella if ($dump) { $temp = $profile; unset ($profile); @@ -937,578 +942,464 @@ $profile[] = microtime (); } -// Set up a tick handler +// Imposta un tick handler register_tick_function("profile"); -// Initialize the function before the declare block +// Inizializza la funzione prima del blocco declare profile (); -// Run a block of code, throw a tick every 2nd statement -declare (ticks=2) { +// Esegue un blocco di codice, attraverso un tick ogni seconda istruzione +declare (ticks = 2) { for ($x = 1; $x < 50; ++$x) { echo similar_text (md5($x), md5($x*$x)), "<br>"; } } -// Display the data stored in the profiler +// Mostra i dati immagazionati nel profilo print_r (profile (TRUE)); ?> </pre> ]]> </programlisting> </example> - The example profiles the PHP code within the 'declare' - block, recording the time at which every second low-level - statement in the block was executed. This information can - then be used to find the slow areas within particular - segments of code. This process can be performed using other - methods: using ticks is more convenient and easier to - implement. + L'esempio descrive il codice PHP all'interno del blocco 'declare', + registrando il tempo in cui è stata eseguita ogni seconda istruzione + di basso livello. Questa informazione può + poi essere usata per trovare le aree lente all'interno di particolari + segmenti di codice. Questo processo può essere ottimizzato usando altri + metodi: usando i tick è più conveniente e facile da + implementare. </para> <simpara> - Ticks are well suited for debugging, implementing simple - multitasking, backgrounded I/O and many other tasks. + I tick sono ben adeguati per il debugging, l'implementazione di semplici + multitasking, backgrounded I/O e molti altri compiti. </simpara> <simpara> - See also <function>register_tick_function</function> and + Vedere anche <function>register_tick_function</function> e <function>unregister_tick_function</function>. </simpara> </sect2> </sect1> - - <sect1 id="function.require"> - <title><function>require</function></title> - <simpara> - The <function>require</function> statement replaces itself with - the specified file, much like the C preprocessor's - <literal>#include</literal> works. - </simpara> - <simpara> - If "URL fopen wrappers" are enabled in PHP (which they are in the - default configuration), you can specify the file to be - <function>require</function>ed using an URL instead of a local - pathname. See <link linkend="features.remote-files">Remote - files</link> and <function>fopen</function> for more information. - </simpara> + + <sect1 id="function.return"> + <title>return</title> <simpara> - An important note about how this works is that when a file is - <function>include</function>ed or <function>require</function>ed, - parsing drops out of PHP mode and into HTML mode at the beginning - of the target file, and resumes PHP mode again at the end. For - this reason, any code inside the target file which should be - executed as PHP code must be enclosed within <link - linkend="language.basic-syntax.phpmode">valid PHP start and end - tags</link>. + Se viene chiamato all'interno di una funzione, l'istruzione <function>return</function> + termina immediatamente l'esecuzione della funzione corrente, e + restituisce il suo argomento come valore della funzione + chiamata. <function>return</function> terminerà anche l'esecuzione di un'istruzione + <function>eval</function> o di un file di script. + </simpara> + <simpara> + Se viene chiamato in uno scope globale, allora verrà terrminata l'esecuzione + del file di script corrente. Nel caso in cui il file di script corrente sia un file chiamato da + <function>include</function> o <function>require</function>, + il controllo viene passato al file chiamante. Ciononostante, se + il file di script corrente è un file chiamato da <function>include</function>, allora + il valore dato da <function>return</function> verrà restituito + come valore della chiamata <function>include</function>. Se + viene chiamato <function>return</function> all'interno del file di script + principale, allora l'esecuzione dello script terminerà. Se il file di script corrente + è stato nominato da <link + linkend="ini.auto-prepend-file">auto_prepend_file</link> o <link + linkend="ini.auto-append-file">auto_append_file</link> + con le opzioni di configurazione nel <link linkend="configuration.file"> + file di configurazione</link>, allora l'esecuzione di quello script + termina. </simpara> - <simpara> - <function>require</function> is not actually a function in PHP; - rather, it is a language construct. It is subject to some - different rules than functions are. For instance, - <function>require</function> is not subject to any containing - control structures. For another, it does not return any value; - attempting to read a return value from a - <function>require</function> call results in a parse error. - </simpara> - <simpara> - Unlike <function>include</function>, <function>require</function> - will <emphasis>always</emphasis> read in the target file, - <emphasis>even if the line it's on never executes</emphasis>. If - you want to conditionally include a file, use - <function>include</function>. The conditional statement won't - affect the <function>require</function>. However, if the line on - which the <function>require</function> occurs is not executed, - neither will any of the code in the target file be executed. + <simpara>Per maggiori informazioni, consultare <link + linkend="functions.returning-values">Valori restituiti</link>. </simpara> + <note> + <simpara> + Notate che poichè <function>return</function> è un costrutto di linguaggio + e non una funzione, le parentesi che circondano i suoi + argomenti <emphasis>non</emphasis> sono richieste --infatti, è + più comune evitarle che usarle, nonostante ciò + non c'è motivo di preferire un modo o l'altro. + </simpara> + </note> + </sect1> + + + <sect1 id="function.require"> + <title><function>require</function></title> + <simpara> - Similarly, looping structures do not affect the behaviour of - <function>require</function>. Although the code contained in the - target file is still subject to the loop, the - <function>require</function> itself happens only once. + L'istruzione <function>require</function> include e valuta + il file specifico. </simpara> - <para> - This means that you can't put a <function>require</function> - statement inside of a loop structure and expect it to include the - contents of a different file on each iteration. To do that, use an - <function>include</function> statement. - <informalexample> - <programlisting role="php"> -<![CDATA[ -require ('header.inc'); -]]> - </programlisting> - </informalexample> - </para> <simpara> - When a file is <function>require</function>ed, the code it - contains inherits the variable scope of the line on which the - <function>require</function> occurs. Any variables available at - that line in the calling file will be available within the called - file. If the <function>require</function> occurs inside a - function within the calling file, then all of the code contained - in the called file will behave as though it had been defined - inside that function. + <function>require</function> include e valuta uno specifico file. + Informazioni dettagliate su come funziona quest'inclusione sono descritte nella + documentazione di <function>include</function>. + </simpara> + <simpara> + <function>require</function> e <function>include</function> + sono identiche in ogni senso eccetto per come esse trattano gli errori. + <function>include</function> produce un + <link linkend="internal.e-warning">Warning</link> mentre + <function>require</function> restituisce un <link linkend="internal.e-error"> + Fatal Error</link>. In altre parole, non esitate ad usare + <function>require</function> se volete che un file mancante fermi l'esecuzione + della pagina. <function>include</function> non si comporta in questo modo, lo + script continuerà nonostante tutto. Assicuratevi di avere un appropriato + <link linkend="ini.include-path">include_path</link> impostato a dovere. </simpara> <para> - If the <function>require</function>ed file is called via HTTP - using the fopen wrappers, and if the target server interprets the - target file as PHP code, variables may be passed to the - <function>require</function>ed file using an URL request string as - used with HTTP GET. This is not strictly speaking the same thing - as <function>require</function>ing the file and having it inherit - the parent file's variable scope; the script is actually being run - on the remote server and the result is then being included into - the local script. - <informalexample> + <example> + <title>Esempio di base con <function>require</function></title> <programlisting role="php"> <![CDATA[ -/* This example assumes that someserver is configured to parse .php - * files and not .txt files. Also, 'works' here means that the variables - * $varone and $vartwo are available within the require()ed file. */ +<?php -/* Won't work; file.txt wasn't handled by someserver. */ -require ("http://someserver/file.txt?varone=1&vartwo=2"); +require 'prepend.php'; -/* Won't work; looks for a file named 'file.php?varone=1&vartwo=2' - * on the local filesystem. */ -require ("file.php?varone=1&vartwo=2"); +require $qualche_file; -/* Works. */ -require ("http://someserver/file.php?varone=1&vartwo=2"); +require ('qualche_file.txt'); -$varone = 1; -$vartwo = 2; -require ("file.txt"); /* Works. */ -require ("file.php"); /* Works. */ +?> ]]> </programlisting> - </informalexample> + </example> </para> <simpara> - In PHP 3, it is possible to execute a <literal>return</literal> - statement inside a <function>require</function>ed file, as long as - that statement occurs in the global scope of the - <function>require</function>ed file. It may not occur within any - block (meaning inside braces ({}). In PHP 4, however, this ability - has been discontinued. If you need this functionality, see - <function>include</function>. + Vedere la documentazione di <function>include</function> per più esempi. </simpara> + <note> + <simpara> + Prima di PHP 4.0.2, si applica la seguente logica: <function>require</function> + tenterà sempre di leggere il file chiamato, anche se la riga su cui si trova non verrà mai eseguita. + L'istruzione condizionale non avrà effetto su <function>require</function>. Comunque, + se la riga su cui si verifica <function>require</function> non viene eseguita, + non sarà eseguito nemmeno il codice del file incluso. Similmente, le strutture + cicliche non avranno effetto sul comportamento di <function>require</function>. Sebbene + il codice contenuto nel file incluso è ancora soggetto a ciclo, + <function>require</function> stesso si verifica solo una volta. + </simpara> + </note> <simpara> - See also <function>include</function>, <function>require_once</function>, - <function>include_once</function>, <function>readfile</function>, - and <function>virtual</function>. + Vedere anche <function>include</function>, <function>require_once</function>, + <function>include_once</function>, <function>eval</function>, + <function>file</function>, <function>readfile</function>, + <function>virtual</function> e <link linkend="ini.include-path">include_path</link>. </simpara> </sect1> - <sect1 id="function.include"> + <sect1 id="function.include"> <title><function>include</function></title> <simpara> - The <function>include</function> statement includes and evaluates - the specified file. - </simpara> - <simpara> - If "URL fopen wrappers" are enabled in PHP (which they are in the - default configuration), you can specify the file to be - <function>include</function>ed using an URL instead of a local - pathname. See <link linkend="features.remote-files">Remote - files</link> and <function>fopen</function> for more information. + L'istruzione <function>include</function> include e valuta + il file specificato. </simpara> <simpara> - An important note about how this works is that when a file is - <function>include</function>ed or <function>require</function>ed, - parsing drops out of PHP mode and into HTML mode at the beginning - of the target file, and resumes again at the end. For this reason, - any code inside the target file which should be executed as PHP - code must be enclosed within <link - linkend="language.basic-syntax.phpmode">valid PHP start and end - tags</link>. + La documentazione seguente si applica anche a <function>require</function>. + I due costrutti sono identici in ogni aspetto eccetto per come essi trattano + gli errori. <function>include</function> produce un + <link linkend="internal.e-warning">Warning</link> mentre <function>require</function> + restituisce un <link linkend="internal.e-error">Fatal Error</link>. + In altre parole, usate <function>require</function> se volete che + un file mancante fermi l'esecuzione della pagina. <function>include</function> + non si comporta in questo modo, lo script continuerà nonostante tutto. Assicuratevi di avere un + appropriato <link linkend="ini.include-path">include_path</link> impostato a dovere. + </simpara> + <simpara> + Quando un file viene incluso, il codice che esso contiene eredita lo + <link linkend="language.variables.scope">scope delle variabili</link> della + riga in cui si verifica l'inclusione. Qualsiasi variabile disponibile in quella riga + nella chiamata al file sarà disponibile all'interno del file chiamato, da + quel punto in avanti. </simpara> <para> - This happens each time the <function>include</function> statement - is encountered, so you can use an <function>include</function> - statement within a looping structure to include a number of - different files. - <informalexample> - <programlisting role="php"> -<![CDATA[ -$files = array ('first.inc', 'second.inc', 'third.inc'); -for ($i = 0; $i < count($files); $i++) { - include $files[$i]; -} -]]> - </programlisting> - </informalexample> - </para> - <para> - <function>include</function> differs from - <function>require</function> in that the include statement is - re-evaluated each time it is encountered (and only when it is - being executed), whereas the <function>require</function> - statement is replaced by the required file when it is first - encountered, whether the contents of the file will be evaluated or - not (for example, if it is inside an <link - linkend="control-structures.if">if</link> statement whose - condition evaluated to &false;). - </para> - <para> - Because <function>include</function> is a special language - construct, you must enclose it within a statement block if it is - inside a conditional block. - <informalexample> - <programlisting role="php"> + <example> + <title>Esempio di base con <function>include</function></title> + <programlisting role="php"> <![CDATA[ -/* This is WRONG and will not work as desired. */ +vars.php +<?php -if ($condition) - include($file); -else - include($other); +$colore = 'verde'; +$frutto = 'mela'; -/* This is CORRECT. */ +?> -if ($condition) { - include($file); -} else { - include($other); -} +test.php +<?php + +echo "Una $frutto $colore"; // Una + +include 'vars.php'; + +echo "Una $frutto $colore"; // Una mela verde + +?> ]]> - </programlisting> - </informalexample> + </programlisting> + </example> </para> <simpara> - In both PHP 3 and PHP 4, it is possible to execute a - <literal>return</literal> statement inside an - <function>include</function>ed file, in order to terminate - processing in that file and return to the script which called - it. Some differences in the way this works exist, however. The - first is that in PHP 3, the <literal>return</literal> may not - appear inside a block unless it's a function block, in which case - the <literal>return</literal> applies to that function and not the - whole file. In PHP 4, however, this restriction does not - exist. Also, PHP 4 allows you to return values from - <function>include</function>ed files. You can take the value of - the <function>include</function> call as you would a normal - function. This generates a parse error in PHP 3. + Se l'inclusione si verifica dentro una funzione all'interno del file chiamato, + allora tutto il codice contenuto nel file chiamato si comporterà come + se esso sia stato definito all'interno di una funzione. Così, esso seguirà + lo scope delle variabili di quella funzione. </simpara> - <example> - <title><function>include</function> in PHP 3 and PHP 4</title> - <para> - Assume the existence of the following file (named - <filename>test.inc</filename>) in the same directory as the main - file: - <programlisting role="php"> + <para> + <example> + <title>Inclusione all'interno di funzioni</title> + <programlisting role="php"> <![CDATA[ <?php -echo "Before the return <br>\n"; -if (1) { - return 27; + +function foo() +{ +global $frutto; + + include 'vars.php'; + + echo "Una $frutto $colore"; } -echo "After the return <br>\n"; -?> -]]> - </programlisting> - </para> - <para> - Assume that the main file (<filename>main.html</filename>) - contains the following: - <programlisting role="php"> -<![CDATA[ -<?php -$retval = include ('test.inc'); -echo "File returned: '$retval'<br>\n"; -?> -]]> - </programlisting> - </para> - <para> - When <filename>main.html</filename> is called in PHP 3, it will - generate a parse error on line 2; you can't take the value of an - <function>include</function> in PHP 3. In PHP 4, however, the - result will be: - <screen> -Before the return -File returned: '27' - </screen> - </para> - <para> - Now, assume that <filename>main.html</filename> has been altered - to contain the following: - <programlisting role="php"> -<![CDATA[ -<?php -include ('test.inc'); -echo "Back in main.html<br>\n"; + +/* vars.php è nello scope di foo() così * + * $colore NON è disponibile fuori di * + * questo scope. $frutto si perchè è stato * + * dichiarato globale. */ + +foo(); // Una mela verde +echo "Una $frutto $colore"; // Una mela + ?> ]]> </programlisting> - </para> - <para> - In PHP 4, the output will be: - <screen> -Before the return -Back in main.html - </screen> - However, PHP 3 will give the following output: - <screen> -Before the return -27Back in main.html - -Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5 - </screen> - </para> - <para> - The above parse error is a result of the fact that the - <literal>return</literal> statement is enclosed in a non-function - block within <filename>test.inc</filename>. When the return is - moved outside of the block, the output is: - <screen> -Before the return -27Back in main.html - </screen> - </para> - <para> - The spurious '27' is due to the fact that PHP 3 does not support - <literal>return</literal>ing values from files like that. - </para> - </example> + </example> + </para> <simpara> - When a file is <function>include</function>ed, the code it - contains inherits the variable scope of the line on which the - <function>include</function> occurs. Any variables available at - that line in the calling file will be available within the called - file. If the <function>include</function> occurs inside a - function within the calling file, then all of the code contained - in the called file will behave as though it had been defined - inside that function. + Quando un file viene incluso, il parsing esce dalla modalità PHP e + entra in modalità HTML all'inizio del file incluso, e riprende + alla fine. Per questa ragione, qualunque codice all'interno del + file incluso che dovrebbe essere eseguito come codice PHP deve essere incluso all'interno + dei <link linkend="language.basic-syntax.phpmode">tag PHP validi di apertura + e chiusura</link>. + </simpara> + <simpara> + Se "<link linkend="ini.allow-url-fopen">URL fopen wrappers</link>" + nel PHP sono abilitati (come nella configurazione di default), + potete specificare il file da includere usando un URL (via HTTP) + invece che un percorso locale. Se il server chiamato interpreta + il file incluso come codice PHP, le variabili possono essere passate + al file incluso usando una stringa di richiesta URL come con l'utilizzo di HTTP GET. Non è + proprio parlare della stessa cosa includere il file e averlo + ereditato dallo scope di variabili del file chiamante; lo script è stato attualmente + eseguito su un server remoto e il risultato è poi stato + incluso nello script locale. </simpara> <para> - If the <function>include</function>ed file is called via HTTP - using the fopen wrappers, and if the target server interprets the - target file as PHP code, variables may be passed to the - <function>include</function>ed file using an URL request string as - used with HTTP GET. This is not strictly speaking the same thing - as <function>include</function>ing the file and having it inherit - the parent file's variable scope; the script is actually being run - on the remote server and the result is then being included into - the local script. - <informalexample> + <example> + <title><function>include</function> attraverso HTTP</title> <programlisting role="php"> <![CDATA[ -/* This example assumes that someserver is configured to parse .php - * files and not .txt files. Also, 'works' here means that the variables - * $varone and $vartwo are available within the include()ed file. */ - -/* Won't work; file.txt wasn't handled by someserver. */ -include ("http://someserver/file.txt?varone=1vartwo=2"); - -/* Won't work; looks for a file named 'file.php?varone=1&vartwo=2' - * on the local filesystem. */ -include ("file.php?varone=1&vartwo=2"); +<?php -/* Works. */ -include ("http://someserver/file.php?varone=1&vartwo=2"); +/* Questo esempio assume che www.example.com è configurato per eseguire file * + * .php e non file .txt. Anche, 'Funziona' qui significa che le variabili * + * $foo e $bar sono disponibili all'interno del file incluso. */ + +// Non funzionerà; file.txt non è stato trattato da www.example.com come PHP +include 'http://www.example.com/file.txt?foo=1&bar=2'; + +// Non funzionerà; cercare un file chiamato'file.php?foo=1&bar=2' nel +// filesystem locale. +include 'file.php?foo=1&bar=2'; + +// Funziona. +include 'http://www.example.com/file.php?foo=1&bar=2'; + +$foo = 1; +$bar = 2; +include 'file.txt'; // Funziona. +include 'file.php'; // Funziona. -$varone = 1; -$vartwo = 2; -include ("file.txt"); /* Works. */ -include ("file.php"); /* Works. */ +?> ]]> </programlisting> - </informalexample> + </example> + Vedere anche <link linkend="features.remote-files">Remote files</link>, + <function>fopen</function> e <function>file</function> per informazioni + correlate. </para> - <simpara> - See also <function>require</function>, <function>require_once</function>, - <function>include_once</function>, <function>readfile</function>, - and <function>virtual</function>. - </simpara> - </sect1> - - <sect1 id="function.require-once"> - <title><function>require_once</function></title> <para> - The <function>require_once</function> statement replaces - itself with the specified file, much like the C preprocessor's - <literal>#include</literal> works, and in that respect is - similar to the <function>require</function> statement. The main - difference is that in an inclusion chain, the use of - <function>require_once</function> will assure that the code is - added to your script only once, and avoid clashes with variable - values or function names that can happen. + Poichè <function>include</function> e <function>require</function> + sono speciali costrutti di linguaggio, dovete includerli all'interno di + blocchi di istruzioni se si trovano in un blocco condizionale. </para> <para> - For example, if you create the following 2 include files - <literal>utils.inc</literal> and <literal>foolib.inc</literal> - <example> - <title>utils.inc</title> + <example> + <title>include() e i blocchi condizionali</title> <programlisting role="php"> <![CDATA[ <?php -define("PHPVERSION", floor(phpversion())); -echo "GLOBALS ARE NICE\n"; -function goodTea() -{ - return "Oolong tea tastes good!"; + +// Questo NON VA BENE e non funzionerà come desiderato. +if ($condizione) + include $file; +else + include $un_altro; + + +// Questo è CORRETTO. +if ($condizione) { + include $file; +} else { + include $un_altro; } + ?> ]]> </programlisting> - </example> - <example> - <title>foolib.inc</title> - <programlisting role="php"> + </example> + </para> + <simpara> + Trattamento dei valori restituiti: È possibile eseguire un'istruzione <function>return</function> + in un file incluso per terminare l'esecuzione di quel + file e restituirlo allo script che l'ha chiamato. È anche possibile restituire + valori dai file inclusi. Potete prendere il valore di una chiamata di inclusione come + fareste con una normale funzione. + </simpara> + <note> + <simpara> + In PHP 3, return potrebbe non apparire in un blocco a meno che esso sia + un blocco di funzione, nel qual caso <function>return</function> si applica + a quella funzione e non all'intero file. + </simpara> + </note> + <para> + <example> + <title><function>include</function> and the <function>return</function> statement</title> + <programlisting role="php"> <![CDATA[ +return.php <?php -require ("utils.inc"); -function showVar($var) -{ - if (PHPVERSION == 4) { - print_r($var); - } else { - var_dump($var); - } -} -// bunch of other functions ... +$var = 'PHP'; + +return $var; + ?> -]]> - </programlisting> - </example> - And then you write a script <literal>cause_error_require.php</literal> - <example> - <title>cause_error_require.php</title> - <programlisting role="php"> -<![CDATA[ + +noreturn.php <?php -require("foolib.inc"); -/* the following will generate an error */ -require("utils.inc"); -$foo = array("1",array("complex","quaternion")); -echo "this is requiring utils.inc again which is also\n"; -echo "required in foolib.inc\n"; -echo "Running goodTea: ".goodTea()."\n"; -echo "Printing foo: \n"; -showVar($foo); + +$var = 'PHP'; + ?> -]]> - </programlisting> - </example> - When you try running the latter one, the resulting ouptut will be (using - PHP 4.01pl2): - <informalexample> - <screen> -<![CDATA[ -GLOBALS ARE NICE -GLOBALS ARE NICE -Fatal error: Cannot redeclare goodTea() in utils.inc on line 5 -]]> - </screen> - </informalexample> - By modifying <literal>foolib.inc</literal> and - <literal>cause_errror_require.php</literal> - to use <function>require_once</function> - instead of <function>require</function> and renaming the - last one to <literal>avoid_error_require_once.php</literal>, we have: - <example> - <title>foolib.inc (fixed)</title> - <programlisting role="php"> -<![CDATA[ -... -require_once("utils.inc"); -function showVar($var) -{ -... -]]> - </programlisting> - </example> - <example> - <title>avoid_error_require_once.php</title> - <programlisting role="php"> -<![CDATA[ -... -require_once("foolib.inc"); -require_once("utils.inc"); -$foo = array("1",array("complex","quaternion")); -... -]]> - </programlisting> - </example> - And when running the latter, the output will be (using PHP 4.0.1pl2): - <informalexample> - <screen> -<![CDATA[ -GLOBALS ARE NICE -this is requiring globals.inc again which is also -required in foolib.inc -Running goodTea: Oolong tea tastes good! -Printing foo: -Array -( - [0] => 1 - [1] => Array - ( - [0] => complex - [1] => quaternion - ) +testreturns.php +<?php -) +$foo = include 'return.php'; + +echo $foo; // stampa 'PHP' + +$bar = include 'noreturn.php'; + +echo $bar; // stampa 1 + +?> ]]> - </screen> - </informalexample> - </para> - <para> - Also note that, analogous to the behavior of the - <literal>#include</literal> of the C preprocessor, this statement - acts at "compile time", e.g. when the script is parsed and before it - is executed, and should not be used for parts of the script that need - to be inserted dynamically during its execution. You should use - <function>include_once</function> or <function>include</function> - for that purpose. + </programlisting> + </example> </para> + <simpara> + <literal>$bar</literal> ha valore <literal>1</literal> perchè l'inclusione + è stata eseguita con successo. Notare la differenza tra gli esempi sopra. Il primo usa + <function>return</function> all'interno di un file incluso mentre l'altro no. + Pochi altri modi di "includere" file in variabili sono con + <function>fopen</function>, <function>file</function> o usando + <function>include</function> insieme con + <link linkend="ref.outcontrol">Output Control Functions</link>. + </simpara> + + <simpara> + Vedere anche <function>require</function>, <function>require_once</function>, + <function>include_once</function>, <function>readfile</function>, + <function>virtual</function>, e + <link linkend="ini.include-path">include_path</link>. + </simpara> + +</sect1> + + <sect1 id="function.require-once"> + <title><function>require_once</function></title> <para> - For more examples on using <function>require_once</function> and - <function>include_once</function>, look at the PEAR code included in - the latest PHP source code distributions. + L'istruzione <function>require_once</function> include e valuta + il file specificato durante l'esecuzione dello script. + È un comportamento simile all'istruzione <function>require</function>, + con la sola differenza che se il codice di un file è stato + già incluso, esso non sarà incluso nuovamente. Vedere la documentazione di + <function>require</function> per maggiori informazioni su come funziona + quest'istruzione. + </para> + <para> + <function>require_once</function> dovrebbe essere usato nei casi dove + lo stesso file potrebbe essere incluso e valutato più di una volta durante + una particolare esecuzione di uno script, e volete essere sicuri che esso sia + incluso esattamente una volta per evitare problemi con la ridefinizione di funzioni, + riassegnazione di valori a variabili, etc. + </para> + <para> + Per esempi sull'utilizzo di <function>require_once</function> e + <function>include_once</function>, consultare il codice + <ulink url="&url.php.pear;">PEAR</ulink> incluso + nell'ultima distribuzione del codice sorgente di PHP. </para> + <note> + <para> + <function>require_once</function> è stato aggiunto in PHP 4.0.1pl2 + </para> + </note> <para> - See also: <function>require</function>, + Vedere anche: <function>require</function>, <function>include</function>, <function>include_once</function>, <function>get_required_files</function>, <function>get_included_files</function>, <function>readfile</function>, - and <function>virtual</function>. + e <function>virtual</function>. </para> </sect1> - <sect1 id="function.include-once"> + <sect1 id="function.include-once"> <title><function>include_once</function></title> <para> - The <function>include_once</function> statement includes and evaluates - the specified file during the execution of the script. - This is a behavior similar to the <function>include</function> statement, - with the important difference that if the code from a file has already - been included, it will not be included again. - </para> - <para> - As mentioned in the <function>require_once</function> description, the - <function>include_once</function> should be used in the cases in which - the same file might be included and evaluated more than once during a - particular execution of a script, and you want to be sure that it is - included exactly once to avoid problems with function redefinitions, - variable value reassignments, etc. - </para> - <para> - For more examples on using <function>require_once</function> and - <function>include_once</function>, look at the PEAR code included in - the latest PHP source code distributions. - </para> - <para> - <function>include_once</function> was added in PHP 4.0.1pl2 + L'istruzione <function>include_once</function> include e valuta + il file specificato durante l'esecuzione dello script. + È un comportamento simile all'istruzione <function>include</function>, + con la sola differenza che se il codice di un file è stato + già incluso, esso non sarà incluso nuovamente. Come suggerisce il nome, + esso sarà incluso solo una volta. + </para> + <para> + <function>include_once</function> dovrebbe essere usato nei casi dove + lo stesso file potrebbe essere incluso e valutato più di una volta durante + una particolare esecuzione di uno script, e volete essere sicuri che esso sia + incluso esattamente una volta per evitare problemi con la ridefinizione di funzioni, + riassegnazione di valori a variabili, etc. + </para> + <para> + Per maggiori esempi sull'utilizzo di <function>require_once</function> e + <function>include_once</function>, consultare il codice + <ulink url="&url.php.pear;">PEAR</ulink> incluso + nell'ultima distribuzione del codice sorgente di PHP. </para> + <note> + <para> + <function>include_once</function> è stato aggiunto in PHP 4.0.1pl2 + </para> + </note> <para> - See also: <function>require</function>, - <function>include</function>, <function>require_once</function>, + Vedere anche <function>include</function>, + <function>require</function>, <function>require_once</function>, <function>get_required_files</function>, <function>get_included_files</function>, <function>readfile</function>, - and <function>virtual</function>. + e <function>virtual</function>. </para> </sect1>