cvs: phpdoc-it /language basic-syntax.xml references.xml
| From: | Andrioli Darvin | Date: | Wed, 22 Jun 2005 11:54:56 +0000 |
| Subject: | cvs: phpdoc-it /language basic-syntax.xml references.xml | ||
| Groups: | php.doc.it | ||
| Request: | Send a blank email to doc-it+get-753@lists.php.net to get a copy of this message | ||
darvina Wed Jun 22 07:54:56 2005 EDT
Modified files:
/phpdoc-it/language basic-syntax.xml references.xml
Log:
Sync to En tree
http://cvs.php.net/diff.php/phpdoc-it/language/basic-syntax.xml?r1=1.10&r2=1.11&ty=u Index: phpdoc-it/language/basic-syntax.xml diff -u phpdoc-it/language/basic-syntax.xml:1.10 phpdoc-it/language/basic-syntax.xml:1.11 --- phpdoc-it/language/basic-syntax.xml:1.10 Fri Jul 11 15:55:27 2003 +++ phpdoc-it/language/basic-syntax.xml Wed Jun 22 07:54:54 2005 @@ -1,126 +1,121 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.34 Maintainer: perugini Status: ready --> +<!-- EN-Revision: 1.44 Maintainer: perugini Status: ready --> <chapter id="language.basic-syntax"> <title>Sintassi Fondamentale</title> - - <!-- - - NOTE: Last modified: 2001-05-16 13:00 GMT - - the language part is currently under heavy revision. Please do not - not make any heavy (i.e. structural) modifications to this part - for a moment. - - You'd also better not start any translation yet. - - Comments are always welcome at phpdoc@lists.php.net - - Progress: - - intro : DOESN'T EXIST - yet? - new chapter, with some introductionary remarks? - Will be discussed on the ML soon. - basic-syntax: - FINISHED - except maybe moving the 'advanced escaping' - to a better place? - TODO: - - nada - types : Being revised. Added all new types - Boolean and Integer are more or less finished. - The rest isn't. - TODO: - - why is $foo[bar] bad syntax? - - what's the difference between unset($bla) and - $bla = NULL; (it is different!) - - $obj->{expr} syntax - - (unset) cast????? - - $bla = unset <== should've been nuked, don't mention it - - $str{offset} syntax, rather than $str[offset] - - read notes and apply when any of them are useful - - remove notes which have been included here. - - ... - the rest: Not yet started with. - TODO: - - ? - oop : has been revised by Kristian, DONE. - --> <sect1 id="language.basic-syntax.phpmode"> - <title>Modi per uscire dalla modalità HTML</title> - + <title>Modi per uscire dalla modalità HTML</title> <para> - Quando il PHP inizia a esaminare un file, visualizzerà il contenuto del file - sino a quando non incontra uno dei tag speciali indicanti l'inizio - del codice da interpretare come istruzioni PHP. A questo punto il parser - eseguirà tutto il codice trovato sino a quando non incontrerà - i tag di chiusura, che indicano al parser di tornare alla modalità - di visualizzazione. Questo meccanismo permette di inserire codice PHP - all'interno di codice HTML: tutto ciò che si trova all'esterno - dei tag PHP sarà lasciato inalterato, mentre tutto ciò che si trova all'interno - sarà eseguito come codice PHP. + Quando il PHP inizia a esaminare un file, cerca i tag di apertura e di chiusura, + che indicano dove iniziare e terminare l'interpretazione del codice. + Questa tecnica permette al PHP di essere incorporato in tutte + le tipologie di documenti, poichè ogni cosa esterna ai tag + di apertura e di chiusura viene ignoarat dal parser PHP. + Il più delle volte si vedrà codice PHP racchiuso in documenti HTML, + come nel seguente esempio. + <informalexample> + <programlisting role="php"> +<![CDATA[ +<p>This is going to be ignored.</p> +<?php echo 'While this is going to be parsed.'; ?> +<p>This will also be ignored.</p> +]]> + </programlisting> + </informalexample> </para> - - <para> + <para> + Si possono usare anche strutture più avanzate: + <example> + <title>Escape avanzato</title> + <programlisting role="php"> +<![CDATA[ +<?php +if ($expression) { + ?> + <strong>This is true.</strong> + <?php +} else { + ?> + <strong>This is false.</strong> + <?php +} +?> +]]> + </programlisting> + </example> + Questo codice funziona come atteso, perchè quando il PHP trova il tag di chiusura ?>, + inizia a visualizzare tutto ciò che incontra sino a quando non si raggiunge + un'altro tag di apertura. L'esempio è semplificato, ovviamente, + ma nella visualizzazzione di grossi blocchi di testo uscire dalla + modalità di parsing del codice PHP è generalmente più efficiente che inviare il tutto + tramite <function>echo</function> o + <function>print</function>. + </para> + <para> Esistono 4 set di tag che possono essere utilizzati per delimitare blocchi di codice PHP. Soltanto due di questi (<?php. . .?> e <script language="php">. . .</script>) - sono sempre disponibili; - gli altri possono essere attivati o disattivati tramite il file di configurazione - &php.ini;. - Sebbene i tag brevi o quelli in stile ASP possano essere pratici, il supporto di questi non - è garantito in tutte le versioni. Quindi, se si intende inserire codice - PHP all'interno di testi XMl o XHTML, occorre utilizzare - <?php. . .?> per essere conformi allo standard XML. + sono sempre disponibili. + Gli altri due sono i tag brevi e i tag stile <productname>ASP</productname> + e possono essere attivati o disattivati tramite il file di configurazione + &php.ini;. Sebbene i tag brevi o quelli in stile <productname>ASP</productname> + possano essere pratici, questi sono meno + portabili e, in generale, sconsigliati. + <note> + <para> + Occorre notare che se si intende inserire codice + PHP all'interno di testi XMl o XHTML, occorre utilizzare + <?php ?> per essere conformi allo standard XML. + </para> + </note> </para> - <para> - I tag supportati dal PHP sono: - </para> - - <para> - <example> - <title>Metodi per uscire dalla modalità HTML</title> - <programlisting role="php"> -<![CDATA[ -1. <?php echo("se si vogliono produrre documenti XHTML o XML, si utilizzi questo modo\n"); ?> + <example> + <title>Tag di apertura e di chiusura</title> + <programlisting role="php"> +<![CDATA[ +1. <?php echo 'se si vogliono produrre documenti XHTML o XML, si utilizzi questo modo'; ?> +2. <script language="php"> + echo 'alcuni editor (tipo FrontPage) non + amano le istruzioni di elaborazione'; + </script> -2. <? echo ("questo è il più semplice, ovvero come istruzione SGML\n"); ?> +3. <? echo 'questo è il più semplice, ovvero come istruzione SGML'; ?> <?= espressione ?> Questa è un'abbreviazione per "<? echo espressione ?>" -3. <script language="php"> - echo ("alcuni editor (tipo FrontPage) non - amano le istruzioni di elaborazione"); - </script> -4. <% echo ("Opzionalmente puoi utilizzare tag nello stile ASP"); %> - <%= $variable; # Questo è una abbreviazione per "<%echo .." %> +4. <% echo 'Opzionalmente puoi utilizzare tag nello stile ASP'; %> + <%= $variable; # Questo è una abbreviazione per "<% echo ..." %> ]]> </programlisting> </example> </para> <para> - Il primo, <?php. . .?>, è il metodo preferenziale, dato che permette - l'utilizzo del PHP all'interno di codice conforme a specifiche XML come XHTML. - </para> - - <para> - Il secondo metodo è disponibile solo se sono stati abilitati - i tags abbreviati. Ciò può - essere impostato sia utilizzando la funzione <function>short_tags</function> (solo PHP 3), sia - abilitando nel file di configurazione del PHP l'opzione - <link linkend="ini.short-open-tag">short_open_tag</link>, oppure compilando il PHP - utilizzando l'opzione --enable-short-tags nel comando <command>configure</command>. - Sebbene siano abilitati nel php.ini-dist riilasciato, l'uso dei tag brevi è vivamente sconsigliato. - </para> - - <para> - Il quarto modo è disponibile solo se sono stati attivati nel file - di configurazione i tag in stile ASP tramite l'opzione - <link linkend="ini.asp-tags">asp_tags</link>. - + Sebbene i tag utilizzati negli esempi 1 e 2 siano sempre + disponibili, l'esempio uno rappresenta la situazione più comunemente + utilizzata, e la più raccomandata dei due. + </para> + <para> + I tag brevi (esempio tre) sono disponibili soltanto se sono stati + abilitati tramite il parametro <link linkend="ini.short-open-tag">short_open_tag</link> + del &php.ini;, oppure se il PHP è stato configurato con + <option>--enable-short-tags</option>. <note> - <para>Il supporto per i tag nello stile ASP è stato aggiunto nella versione 3.0.4.</para> + <para> + Se si utilizza il PHP 3 si può anche avere disponibili i tag brevi tramite + la funzione <function>short_tags</function>. <emphasis>Questo + vale solo per il PHP 3!</emphasis> + </para> + </note> + </para> + <para> + I tag in stile <productname>ASP</productname> (esempio quattro) sono disponibili soltanto quando + sono abilitati tramite il parametro + <link linkend="ini.asp-tags">asp_tags</link> del &php.ini; + <note> + <para> + Il supporto per i tag nello stile <productname>ASP</productname> è stato aggiunto nella versione 3.0.4. + </para> </note> </para> <para> @@ -134,81 +129,51 @@ </para> </note> </para> - - <para> - Il tag di chiusura di un blocco include il carattere di 'a capo' - immediatamente seguente, se presente. Inoltre, il tag di chiusura - viene considerato automaticamente come punto e virgola; pertanto non - occorre inserire il punto e virgola alla fine dell'ultima riga del blocco php. - </para> - - <para> - Il PHP permette strutture tipo le seguenti: - <example><title>Modi avanzati per uscire dalla modalità HTML</title> - <programlisting role="php"> -<![CDATA[ -<?php -if ($expression) { - ?> - <strong>Questa è vera.</strong> - <?php -} else { - ?> - <strong>Questa è falsa.</strong> - <?php -} -?> -]]> - </programlisting> - </example> - Questo esempio agisce come atteso, poichè il PHP rileva il tag di - chiusura ?>, e da questo punto, inizia a dare in output tutto ciò - che trova fino a quando non rileva un'altro tag di apertura. - Certamente l'esempio dato è macchinoso, ma per l'output - di grossi blocchi di testo, l'uscire dalla modalità di parsing PHP, - è generalmente più efficiente piuttosto che inviare il testo - tramite ripetute funzioni <function>echo</function> o - <function>print</function>. - </para> </sect1> <sect1 id="language.basic-syntax.instruction-separation"> <title>Separazione delle istruzioni</title> - - <simpara> - Le istruzioni sono separate come nel C o in Perl - - ogni istruzione termina con un punto e virgola. - </simpara> - + <para> - Il tag di chiusura (?>) implica anche la fine di un'istruzione, - perciò le seguenti sono equivalenti: + Come in C od in Perl, il PHP richiede che le istruzioni siano separate + dal punto e virgola al termine di ogni istruzione. I tag di chiusura + di un blocco di codice PHP implicano in automatico il punto e virgola; + non occorre, pertanto, inserire il punto e virgola per chiudere l'ultima riga + di un blocco PHP. Il tag di chiusura del blocco include il newline + immediatamente seguente, se presente. <informalexample> <programlisting role="php"> <![CDATA[ <?php - echo "Questo ` un test"; + echo 'Questo ` un test'; ?> -<?php echo "Questo ` un test" ?> +<?php echo 'Questo ` un test' ?> ]]> </programlisting> </informalexample> + <note> + <para> + Il tag di chiusura di un blocco PHP alla fine di un file è opzionale, + ed in alcuni casi è utile non utilizzarlo soprattutto quando si utilizza l'output buffering + e le funzioni <function>include</function> o <function>require</function>. + </para> + </note> </para> </sect1> <sect1 id="language.basic-syntax.comments"> <title>Commenti</title> <para> - Il PHP supporta i commenti dei linguaggi 'C', 'C++' e della shell Unix. Per esempio: + Il PHP supporta i commenti dei linguaggi 'C', 'C++' e stile shell (stile Perl) di Unix. Per esempio: <informalexample> <programlisting role="php"> <![CDATA[ <?php - echo "Questo ` un test"; // Questo è un commento su una linea nella stile c++ + echo 'Questo ` un test'; // Questo è un commento su una linea nella stile c++ /* Questo è un commento su più linee ancora un'altra linea di commento */ - echo "Questo è un altro test"; - echo "Un ultimo test"; # Questo è un commento stile shell Unix + echo 'Questo è un altro test'; + echo 'Un ultimo test'; # Questo è un commento stile shell Unix ?> ]]> </programlisting> @@ -217,20 +182,27 @@ <simpara> Lo stile di commento su "una linea", attualmente commenta solo fino alla fine della linea - o del blocco corrente di - codice PHP. + o del blocco corrente di codice PHP. + Questo significa che l'eventuale codice HTML posto dopo <literal>// ?></literal> sarà stampato: + ?> esce dalla modalità PHP e ritorna in modalità HTML, e quindi + <literal>//</literal> non può influenzare quest'ultima. + Se l'impostazione <link linkend="ini.asp-tags">asp_tags</link> + è abilitata, il PHP si comporta allo stesso modo con <literal>// %></literal>. + Tuttavia il tag <literal></script></literal> non esce dalla modalità PHP nei commenti + di una linea. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ -<h1>Questo è un <?# echo "semplice";?> esempio.</h1> -<p>L'intestazione qui sopra dirà 'Questo è un esempio'. +<h1>Questo è un <?# echo 'semplice';?> esempio.</h1> +<p>L'intestazione qui sopra dirà 'Questo è un esempio'.</p> ]]> </programlisting> </informalexample> </para> <simpara> + I commenti in stile C terminano alla prima occorrenza di <literal>*/</literal>. Occorre fare attenzione nel non annidare i commenti di stile C, situazione che si presenta quando si commentano larghi blocchi di codice. </simpara> @@ -240,20 +212,13 @@ <![CDATA[ <?php /* - echo "Questo è un test"; /* Questo commento causerà dei problemi */ + echo 'Questo è un test'; /* Questo commento causerà dei problemi */ */ ?> ]]> </programlisting> </informalexample> </para> - <simpara> - Lo stile di commento su linea singola commenta il testo fino - alla fine della riga oppure alla fine del blocco di codice PHP, dipende da cosa si incontra prima. - Questo significa che il codice HTML posizionato dopo <literal>// ?></literal> SARA' visualizzato: - ?> indica di uscire dal modo PHP e di ritornare in modalità HTML, e, quindi, - <literal>//</literal> non hanno più effetto. - </simpara> </sect1> </chapter> http://cvs.php.net/diff.php/phpdoc-it/language/references.xml?r1=1.5&r2=1.6&ty=u Index: phpdoc-it/language/references.xml diff -u phpdoc-it/language/references.xml:1.5 phpdoc-it/language/references.xml:1.6 --- phpdoc-it/language/references.xml:1.5 Tue May 31 08:29:50 2005 +++ phpdoc-it/language/references.xml Wed Jun 22 07:54:54 2005 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.24 Maintainer: alan_dangelo Status: ready --> +<!-- EN-Revision: 1.39 Maintainer: alan_dangelo Status: ready --> <chapter id="language.references"> <title>Spiegazioni sui riferimenti</title> @@ -25,12 +25,14 @@ <informalexample> <programlisting role="php"> <![CDATA[ -$a =& $b +<?php +$a =& $b; +?> ]]> </programlisting> </informalexample> <varname>$a</varname> e <varname>$b</varname> - puntano alla stessa variabile. + puntano allo stesso contenuto. <note> <para> <varname>$a</varname> e <varname>$b</varname> sono completamente @@ -41,14 +43,22 @@ </para> </note> </para> + <note> + <para> + Se si copia una matrice contenete dei riferimenti, i valori non sono dereferenziati. + Questo vale anche per le matrici passate per valore alle funzioni. + </para> + </note> <para> Questa sintassi si può usare con le funzioni, nella restituzione per riferimento, e con l'operatore <literal>new</literal> (da PHP 4.0.4 in poi): <informalexample> <programlisting role="php"> <![CDATA[ +<?php $bar =& new fooclass(); -$foo =& find_var ($bar); +$foo =& find_var($bar); +?> ]]> </programlisting> </informalexample> @@ -71,6 +81,90 @@ Engine e provoca un parser error. </para> </note> + <warning> + <para> + Se si assegna un riferimento ad una varibile dichiarata <literal>global</literal> + dall'interno di una funzione, il riferimento sarà visibile solo all'interno della funzione stessa. + Si può evitare tutto ciò utilizzando la matrice <varname>$GLOBALS</varname>. + <example> + <title>Riferimenti di varibiali globali all'interno di una funzione</title> + <programlisting role="php"> +<![CDATA[ +<?php +$var1 = "Example variable"; +$var2 = ""; + +function global_references($use_globals) +{ + global $var1, $var2; + if (!$use_globals) { + $var2 =& $var1; // visible only inside the function + } else { + $GLOBALS["var2"] =& $var1; // visible also in global context + } +} + +global_references(false); +echo "var2 is set to '$var2'\n"; // var2 is set to '' +global_references(true); +echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable' +?> +]]> + </programlisting> + </example> + Si pensi a <literal>global $var;</literal> come ad una scorciatoia per <literal>$var + =& $GLOBALS['var'];</literal>. Quindi assegnando altri riferimenti + a <literal>$var</literal> si cambia soltanto il riferimento della variabile locale. + </para> + </warning> + <note> + <para> + Se si assegna un valore ad una variabile con riferimenti in una istruzione + <link linkend="control-structures.foreach">foreach</link>, + anche la variabile a cui si fa riferimento sarà modificata. + <example> + <title>Riferimenti e istruzione foreach</title> + <programlisting role="php"> +<![CDATA[ +<?php +$ref = 0; +$row =& $ref; +foreach (array(1, 2, 3) as $row) { + // esegue qualcosa +} +echo $ref; // 3 - ultimo elemento dell'array +?> +]]> + </programlisting> + </example> + </para> + </note> + <warning> + <para> + Spesso le matrici complesse sono copiate che referenziate. Il seguente + esempio non gira come atteso. + <example> + <title>Riferimenti con matrici complesse</title> + <programlisting role="php"> +<![CDATA[ +<?php +$top = array( + 'A' => array(), + 'B' => array( + 'B_b' => array(), + ), +); + +$top['A']['parent'] = &$top; +$top['B']['parent'] = &$top; +$top['B']['B_b']['data'] = 'test'; +print_r($top['A']['parent']['B']['B_b']); // array() +?> +]]> + </programlisting> + </example> + </para> + </warning> <para> Il secondo utilizzo del riferimento è il passaggio di una variabile per riferimento. Questo si fa dichiarando una variabile locale di una funzione e @@ -78,6 +172,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function foo(&$var) { $var++; @@ -85,6 +180,7 @@ $a=5; foo($a); +?> ]]> </programlisting> </informalexample> @@ -108,11 +204,13 @@ <informalexample> <programlisting role="php"> <![CDATA[ -function foo (&$var) +<?php +function foo(&$var) { $var =& $GLOBALS["baz"]; } foo($bar); +?> ]]> </programlisting> </informalexample> @@ -128,6 +226,8 @@ <varname>$var</varname>, ma <varname>$var</varname> possiede soltanto il contenuto della variabile e non il nome del valore collegato nella tabella dei simboli). + Si può utilizzare <link linkend="language.references.return">restiture i + riferimenti</link> per fare riferimenti a variabili selezionate dalla funzione. </simpara> </sect1> @@ -139,6 +239,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function foo(&$var) { $var++; @@ -147,6 +248,7 @@ $a=5; foo($a); // $a adesso è 6 +?> ]]> </programlisting> </informalexample> @@ -173,12 +275,14 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function &bar() { $a = 5; return $a; } foo(bar()); +?> ]]> </programlisting> </informalexample> @@ -195,6 +299,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function bar() // Nota l'assenza di & { $a = 5; @@ -202,12 +307,13 @@ } foo(bar()); -foo($a = 5) // Expressione: non una variabile -foo(5) // Constante: non una variabile +foo($a = 5); // Expressione: non una variabile +foo(5); // Constante: non una variabile +?> ]]> </programlisting> </informalexample> - Questi requisiti sono validi per PHP 4.0.4 e seguenti. + Questi requisiti sono validi per PHP 4.0.4 e seguenti. </para> </sect1> @@ -220,6 +326,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function &find_var($param) { ...codice... @@ -228,6 +335,7 @@ $foo =& find_var($bar); $foo->x = 2; +?> ]]> </programlisting> </informalexample> @@ -242,6 +350,8 @@ si vuole restituire per riferimento, e non per copia come di consueto, e per indicare nella chiamata, il collegamento del riferimento, piuttosto che l'usuale assegnazione che verrebbe fatta per <varname>$foo</varname>. + <literal>&</literal> nella definizione delle funzioni è opzionale nei metodi delle + <link linkend="keyword.class">classi</link>. </simpara> </note> </sect1> @@ -255,9 +365,11 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php $a = 1; $b =& $a; -unset ($a); +unset($a); +?> ]]> </programlisting> </informalexample> @@ -288,7 +400,9 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php $var =& $GLOBALS["var"]; +?> ]]> </programlisting> </informalexample>
http://cvs.php.net/diff.php/phpdoc-it/language/basic-syntax.xml?r1=1.10&r2=1.11&ty=u Index: phpdoc-it/language/basic-syntax.xml diff -u phpdoc-it/language/basic-syntax.xml:1.10 phpdoc-it/language/basic-syntax.xml:1.11 --- phpdoc-it/language/basic-syntax.xml:1.10 Fri Jul 11 15:55:27 2003 +++ phpdoc-it/language/basic-syntax.xml Wed Jun 22 07:54:54 2005 @@ -1,126 +1,121 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.34 Maintainer: perugini Status: ready --> +<!-- EN-Revision: 1.44 Maintainer: perugini Status: ready --> <chapter id="language.basic-syntax"> <title>Sintassi Fondamentale</title> - - <!-- - - NOTE: Last modified: 2001-05-16 13:00 GMT - - the language part is currently under heavy revision. Please do not - not make any heavy (i.e. structural) modifications to this part - for a moment. - - You'd also better not start any translation yet. - - Comments are always welcome at phpdoc@lists.php.net - - Progress: - - intro : DOESN'T EXIST - yet? - new chapter, with some introductionary remarks? - Will be discussed on the ML soon. - basic-syntax: - FINISHED - except maybe moving the 'advanced escaping' - to a better place? - TODO: - - nada - types : Being revised. Added all new types - Boolean and Integer are more or less finished. - The rest isn't. - TODO: - - why is $foo[bar] bad syntax? - - what's the difference between unset($bla) and - $bla = NULL; (it is different!) - - $obj->{expr} syntax - - (unset) cast????? - - $bla = unset <== should've been nuked, don't mention it - - $str{offset} syntax, rather than $str[offset] - - read notes and apply when any of them are useful - - remove notes which have been included here. - - ... - the rest: Not yet started with. - TODO: - - ? - oop : has been revised by Kristian, DONE. - --> <sect1 id="language.basic-syntax.phpmode"> - <title>Modi per uscire dalla modalità HTML</title> - + <title>Modi per uscire dalla modalità HTML</title> <para> - Quando il PHP inizia a esaminare un file, visualizzerà il contenuto del file - sino a quando non incontra uno dei tag speciali indicanti l'inizio - del codice da interpretare come istruzioni PHP. A questo punto il parser - eseguirà tutto il codice trovato sino a quando non incontrerà - i tag di chiusura, che indicano al parser di tornare alla modalità - di visualizzazione. Questo meccanismo permette di inserire codice PHP - all'interno di codice HTML: tutto ciò che si trova all'esterno - dei tag PHP sarà lasciato inalterato, mentre tutto ciò che si trova all'interno - sarà eseguito come codice PHP. + Quando il PHP inizia a esaminare un file, cerca i tag di apertura e di chiusura, + che indicano dove iniziare e terminare l'interpretazione del codice. + Questa tecnica permette al PHP di essere incorporato in tutte + le tipologie di documenti, poichè ogni cosa esterna ai tag + di apertura e di chiusura viene ignoarat dal parser PHP. + Il più delle volte si vedrà codice PHP racchiuso in documenti HTML, + come nel seguente esempio. + <informalexample> + <programlisting role="php"> +<![CDATA[ +<p>This is going to be ignored.</p> +<?php echo 'While this is going to be parsed.'; ?> +<p>This will also be ignored.</p> +]]> + </programlisting> + </informalexample> </para> - - <para> + <para> + Si possono usare anche strutture più avanzate: + <example> + <title>Escape avanzato</title> + <programlisting role="php"> +<![CDATA[ +<?php +if ($expression) { + ?> + <strong>This is true.</strong> + <?php +} else { + ?> + <strong>This is false.</strong> + <?php +} +?> +]]> + </programlisting> + </example> + Questo codice funziona come atteso, perchè quando il PHP trova il tag di chiusura ?>, + inizia a visualizzare tutto ciò che incontra sino a quando non si raggiunge + un'altro tag di apertura. L'esempio è semplificato, ovviamente, + ma nella visualizzazzione di grossi blocchi di testo uscire dalla + modalità di parsing del codice PHP è generalmente più efficiente che inviare il tutto + tramite <function>echo</function> o + <function>print</function>. + </para> + <para> Esistono 4 set di tag che possono essere utilizzati per delimitare blocchi di codice PHP. Soltanto due di questi (<?php. . .?> e <script language="php">. . .</script>) - sono sempre disponibili; - gli altri possono essere attivati o disattivati tramite il file di configurazione - &php.ini;. - Sebbene i tag brevi o quelli in stile ASP possano essere pratici, il supporto di questi non - è garantito in tutte le versioni. Quindi, se si intende inserire codice - PHP all'interno di testi XMl o XHTML, occorre utilizzare - <?php. . .?> per essere conformi allo standard XML. + sono sempre disponibili. + Gli altri due sono i tag brevi e i tag stile <productname>ASP</productname> + e possono essere attivati o disattivati tramite il file di configurazione + &php.ini;. Sebbene i tag brevi o quelli in stile <productname>ASP</productname> + possano essere pratici, questi sono meno + portabili e, in generale, sconsigliati. + <note> + <para> + Occorre notare che se si intende inserire codice + PHP all'interno di testi XMl o XHTML, occorre utilizzare + <?php ?> per essere conformi allo standard XML. + </para> + </note> </para> - <para> - I tag supportati dal PHP sono: - </para> - - <para> - <example> - <title>Metodi per uscire dalla modalità HTML</title> - <programlisting role="php"> -<![CDATA[ -1. <?php echo("se si vogliono produrre documenti XHTML o XML, si utilizzi questo modo\n"); ?> + <example> + <title>Tag di apertura e di chiusura</title> + <programlisting role="php"> +<![CDATA[ +1. <?php echo 'se si vogliono produrre documenti XHTML o XML, si utilizzi questo modo'; ?> +2. <script language="php"> + echo 'alcuni editor (tipo FrontPage) non + amano le istruzioni di elaborazione'; + </script> -2. <? echo ("questo è il più semplice, ovvero come istruzione SGML\n"); ?> +3. <? echo 'questo è il più semplice, ovvero come istruzione SGML'; ?> <?= espressione ?> Questa è un'abbreviazione per "<? echo espressione ?>" -3. <script language="php"> - echo ("alcuni editor (tipo FrontPage) non - amano le istruzioni di elaborazione"); - </script> -4. <% echo ("Opzionalmente puoi utilizzare tag nello stile ASP"); %> - <%= $variable; # Questo è una abbreviazione per "<%echo .." %> +4. <% echo 'Opzionalmente puoi utilizzare tag nello stile ASP'; %> + <%= $variable; # Questo è una abbreviazione per "<% echo ..." %> ]]> </programlisting> </example> </para> <para> - Il primo, <?php. . .?>, è il metodo preferenziale, dato che permette - l'utilizzo del PHP all'interno di codice conforme a specifiche XML come XHTML. - </para> - - <para> - Il secondo metodo è disponibile solo se sono stati abilitati - i tags abbreviati. Ciò può - essere impostato sia utilizzando la funzione <function>short_tags</function> (solo PHP 3), sia - abilitando nel file di configurazione del PHP l'opzione - <link linkend="ini.short-open-tag">short_open_tag</link>, oppure compilando il PHP - utilizzando l'opzione --enable-short-tags nel comando <command>configure</command>. - Sebbene siano abilitati nel php.ini-dist riilasciato, l'uso dei tag brevi è vivamente sconsigliato. - </para> - - <para> - Il quarto modo è disponibile solo se sono stati attivati nel file - di configurazione i tag in stile ASP tramite l'opzione - <link linkend="ini.asp-tags">asp_tags</link>. - + Sebbene i tag utilizzati negli esempi 1 e 2 siano sempre + disponibili, l'esempio uno rappresenta la situazione più comunemente + utilizzata, e la più raccomandata dei due. + </para> + <para> + I tag brevi (esempio tre) sono disponibili soltanto se sono stati + abilitati tramite il parametro <link linkend="ini.short-open-tag">short_open_tag</link> + del &php.ini;, oppure se il PHP è stato configurato con + <option>--enable-short-tags</option>. <note> - <para>Il supporto per i tag nello stile ASP è stato aggiunto nella versione 3.0.4.</para> + <para> + Se si utilizza il PHP 3 si può anche avere disponibili i tag brevi tramite + la funzione <function>short_tags</function>. <emphasis>Questo + vale solo per il PHP 3!</emphasis> + </para> + </note> + </para> + <para> + I tag in stile <productname>ASP</productname> (esempio quattro) sono disponibili soltanto quando + sono abilitati tramite il parametro + <link linkend="ini.asp-tags">asp_tags</link> del &php.ini; + <note> + <para> + Il supporto per i tag nello stile <productname>ASP</productname> è stato aggiunto nella versione 3.0.4. + </para> </note> </para> <para> @@ -134,81 +129,51 @@ </para> </note> </para> - - <para> - Il tag di chiusura di un blocco include il carattere di 'a capo' - immediatamente seguente, se presente. Inoltre, il tag di chiusura - viene considerato automaticamente come punto e virgola; pertanto non - occorre inserire il punto e virgola alla fine dell'ultima riga del blocco php. - </para> - - <para> - Il PHP permette strutture tipo le seguenti: - <example><title>Modi avanzati per uscire dalla modalità HTML</title> - <programlisting role="php"> -<![CDATA[ -<?php -if ($expression) { - ?> - <strong>Questa è vera.</strong> - <?php -} else { - ?> - <strong>Questa è falsa.</strong> - <?php -} -?> -]]> - </programlisting> - </example> - Questo esempio agisce come atteso, poichè il PHP rileva il tag di - chiusura ?>, e da questo punto, inizia a dare in output tutto ciò - che trova fino a quando non rileva un'altro tag di apertura. - Certamente l'esempio dato è macchinoso, ma per l'output - di grossi blocchi di testo, l'uscire dalla modalità di parsing PHP, - è generalmente più efficiente piuttosto che inviare il testo - tramite ripetute funzioni <function>echo</function> o - <function>print</function>. - </para> </sect1> <sect1 id="language.basic-syntax.instruction-separation"> <title>Separazione delle istruzioni</title> - - <simpara> - Le istruzioni sono separate come nel C o in Perl - - ogni istruzione termina con un punto e virgola. - </simpara> - + <para> - Il tag di chiusura (?>) implica anche la fine di un'istruzione, - perciò le seguenti sono equivalenti: + Come in C od in Perl, il PHP richiede che le istruzioni siano separate + dal punto e virgola al termine di ogni istruzione. I tag di chiusura + di un blocco di codice PHP implicano in automatico il punto e virgola; + non occorre, pertanto, inserire il punto e virgola per chiudere l'ultima riga + di un blocco PHP. Il tag di chiusura del blocco include il newline + immediatamente seguente, se presente. <informalexample> <programlisting role="php"> <![CDATA[ <?php - echo "Questo ` un test"; + echo 'Questo ` un test'; ?> -<?php echo "Questo ` un test" ?> +<?php echo 'Questo ` un test' ?> ]]> </programlisting> </informalexample> + <note> + <para> + Il tag di chiusura di un blocco PHP alla fine di un file è opzionale, + ed in alcuni casi è utile non utilizzarlo soprattutto quando si utilizza l'output buffering + e le funzioni <function>include</function> o <function>require</function>. + </para> + </note> </para> </sect1> <sect1 id="language.basic-syntax.comments"> <title>Commenti</title> <para> - Il PHP supporta i commenti dei linguaggi 'C', 'C++' e della shell Unix. Per esempio: + Il PHP supporta i commenti dei linguaggi 'C', 'C++' e stile shell (stile Perl) di Unix. Per esempio: <informalexample> <programlisting role="php"> <![CDATA[ <?php - echo "Questo ` un test"; // Questo è un commento su una linea nella stile c++ + echo 'Questo ` un test'; // Questo è un commento su una linea nella stile c++ /* Questo è un commento su più linee ancora un'altra linea di commento */ - echo "Questo è un altro test"; - echo "Un ultimo test"; # Questo è un commento stile shell Unix + echo 'Questo è un altro test'; + echo 'Un ultimo test'; # Questo è un commento stile shell Unix ?> ]]> </programlisting> @@ -217,20 +182,27 @@ <simpara> Lo stile di commento su "una linea", attualmente commenta solo fino alla fine della linea - o del blocco corrente di - codice PHP. + o del blocco corrente di codice PHP. + Questo significa che l'eventuale codice HTML posto dopo <literal>// ?></literal> sarà stampato: + ?> esce dalla modalità PHP e ritorna in modalità HTML, e quindi + <literal>//</literal> non può influenzare quest'ultima. + Se l'impostazione <link linkend="ini.asp-tags">asp_tags</link> + è abilitata, il PHP si comporta allo stesso modo con <literal>// %></literal>. + Tuttavia il tag <literal></script></literal> non esce dalla modalità PHP nei commenti + di una linea. </simpara> <para> <informalexample> <programlisting role="php"> <![CDATA[ -<h1>Questo è un <?# echo "semplice";?> esempio.</h1> -<p>L'intestazione qui sopra dirà 'Questo è un esempio'. +<h1>Questo è un <?# echo 'semplice';?> esempio.</h1> +<p>L'intestazione qui sopra dirà 'Questo è un esempio'.</p> ]]> </programlisting> </informalexample> </para> <simpara> + I commenti in stile C terminano alla prima occorrenza di <literal>*/</literal>. Occorre fare attenzione nel non annidare i commenti di stile C, situazione che si presenta quando si commentano larghi blocchi di codice. </simpara> @@ -240,20 +212,13 @@ <![CDATA[ <?php /* - echo "Questo è un test"; /* Questo commento causerà dei problemi */ + echo 'Questo è un test'; /* Questo commento causerà dei problemi */ */ ?> ]]> </programlisting> </informalexample> </para> - <simpara> - Lo stile di commento su linea singola commenta il testo fino - alla fine della riga oppure alla fine del blocco di codice PHP, dipende da cosa si incontra prima. - Questo significa che il codice HTML posizionato dopo <literal>// ?></literal> SARA' visualizzato: - ?> indica di uscire dal modo PHP e di ritornare in modalità HTML, e, quindi, - <literal>//</literal> non hanno più effetto. - </simpara> </sect1> </chapter> http://cvs.php.net/diff.php/phpdoc-it/language/references.xml?r1=1.5&r2=1.6&ty=u Index: phpdoc-it/language/references.xml diff -u phpdoc-it/language/references.xml:1.5 phpdoc-it/language/references.xml:1.6 --- phpdoc-it/language/references.xml:1.5 Tue May 31 08:29:50 2005 +++ phpdoc-it/language/references.xml Wed Jun 22 07:54:54 2005 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.24 Maintainer: alan_dangelo Status: ready --> +<!-- EN-Revision: 1.39 Maintainer: alan_dangelo Status: ready --> <chapter id="language.references"> <title>Spiegazioni sui riferimenti</title> @@ -25,12 +25,14 @@ <informalexample> <programlisting role="php"> <![CDATA[ -$a =& $b +<?php +$a =& $b; +?> ]]> </programlisting> </informalexample> <varname>$a</varname> e <varname>$b</varname> - puntano alla stessa variabile. + puntano allo stesso contenuto. <note> <para> <varname>$a</varname> e <varname>$b</varname> sono completamente @@ -41,14 +43,22 @@ </para> </note> </para> + <note> + <para> + Se si copia una matrice contenete dei riferimenti, i valori non sono dereferenziati. + Questo vale anche per le matrici passate per valore alle funzioni. + </para> + </note> <para> Questa sintassi si può usare con le funzioni, nella restituzione per riferimento, e con l'operatore <literal>new</literal> (da PHP 4.0.4 in poi): <informalexample> <programlisting role="php"> <![CDATA[ +<?php $bar =& new fooclass(); -$foo =& find_var ($bar); +$foo =& find_var($bar); +?> ]]> </programlisting> </informalexample> @@ -71,6 +81,90 @@ Engine e provoca un parser error. </para> </note> + <warning> + <para> + Se si assegna un riferimento ad una varibile dichiarata <literal>global</literal> + dall'interno di una funzione, il riferimento sarà visibile solo all'interno della funzione stessa. + Si può evitare tutto ciò utilizzando la matrice <varname>$GLOBALS</varname>. + <example> + <title>Riferimenti di varibiali globali all'interno di una funzione</title> + <programlisting role="php"> +<![CDATA[ +<?php +$var1 = "Example variable"; +$var2 = ""; + +function global_references($use_globals) +{ + global $var1, $var2; + if (!$use_globals) { + $var2 =& $var1; // visible only inside the function + } else { + $GLOBALS["var2"] =& $var1; // visible also in global context + } +} + +global_references(false); +echo "var2 is set to '$var2'\n"; // var2 is set to '' +global_references(true); +echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable' +?> +]]> + </programlisting> + </example> + Si pensi a <literal>global $var;</literal> come ad una scorciatoia per <literal>$var + =& $GLOBALS['var'];</literal>. Quindi assegnando altri riferimenti + a <literal>$var</literal> si cambia soltanto il riferimento della variabile locale. + </para> + </warning> + <note> + <para> + Se si assegna un valore ad una variabile con riferimenti in una istruzione + <link linkend="control-structures.foreach">foreach</link>, + anche la variabile a cui si fa riferimento sarà modificata. + <example> + <title>Riferimenti e istruzione foreach</title> + <programlisting role="php"> +<![CDATA[ +<?php +$ref = 0; +$row =& $ref; +foreach (array(1, 2, 3) as $row) { + // esegue qualcosa +} +echo $ref; // 3 - ultimo elemento dell'array +?> +]]> + </programlisting> + </example> + </para> + </note> + <warning> + <para> + Spesso le matrici complesse sono copiate che referenziate. Il seguente + esempio non gira come atteso. + <example> + <title>Riferimenti con matrici complesse</title> + <programlisting role="php"> +<![CDATA[ +<?php +$top = array( + 'A' => array(), + 'B' => array( + 'B_b' => array(), + ), +); + +$top['A']['parent'] = &$top; +$top['B']['parent'] = &$top; +$top['B']['B_b']['data'] = 'test'; +print_r($top['A']['parent']['B']['B_b']); // array() +?> +]]> + </programlisting> + </example> + </para> + </warning> <para> Il secondo utilizzo del riferimento è il passaggio di una variabile per riferimento. Questo si fa dichiarando una variabile locale di una funzione e @@ -78,6 +172,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function foo(&$var) { $var++; @@ -85,6 +180,7 @@ $a=5; foo($a); +?> ]]> </programlisting> </informalexample> @@ -108,11 +204,13 @@ <informalexample> <programlisting role="php"> <![CDATA[ -function foo (&$var) +<?php +function foo(&$var) { $var =& $GLOBALS["baz"]; } foo($bar); +?> ]]> </programlisting> </informalexample> @@ -128,6 +226,8 @@ <varname>$var</varname>, ma <varname>$var</varname> possiede soltanto il contenuto della variabile e non il nome del valore collegato nella tabella dei simboli). + Si può utilizzare <link linkend="language.references.return">restiture i + riferimenti</link> per fare riferimenti a variabili selezionate dalla funzione. </simpara> </sect1> @@ -139,6 +239,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function foo(&$var) { $var++; @@ -147,6 +248,7 @@ $a=5; foo($a); // $a adesso è 6 +?> ]]> </programlisting> </informalexample> @@ -173,12 +275,14 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function &bar() { $a = 5; return $a; } foo(bar()); +?> ]]> </programlisting> </informalexample> @@ -195,6 +299,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function bar() // Nota l'assenza di & { $a = 5; @@ -202,12 +307,13 @@ } foo(bar()); -foo($a = 5) // Expressione: non una variabile -foo(5) // Constante: non una variabile +foo($a = 5); // Expressione: non una variabile +foo(5); // Constante: non una variabile +?> ]]> </programlisting> </informalexample> - Questi requisiti sono validi per PHP 4.0.4 e seguenti. + Questi requisiti sono validi per PHP 4.0.4 e seguenti. </para> </sect1> @@ -220,6 +326,7 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php function &find_var($param) { ...codice... @@ -228,6 +335,7 @@ $foo =& find_var($bar); $foo->x = 2; +?> ]]> </programlisting> </informalexample> @@ -242,6 +350,8 @@ si vuole restituire per riferimento, e non per copia come di consueto, e per indicare nella chiamata, il collegamento del riferimento, piuttosto che l'usuale assegnazione che verrebbe fatta per <varname>$foo</varname>. + <literal>&</literal> nella definizione delle funzioni è opzionale nei metodi delle + <link linkend="keyword.class">classi</link>. </simpara> </note> </sect1> @@ -255,9 +365,11 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php $a = 1; $b =& $a; -unset ($a); +unset($a); +?> ]]> </programlisting> </informalexample> @@ -288,7 +400,9 @@ <informalexample> <programlisting role="php"> <![CDATA[ +<?php $var =& $GLOBALS["var"]; +?> ]]> </programlisting> </informalexample>