Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 188 additions & 0 deletions language/control-structures/declare.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5499acf9df7e1338d540bde207acc859792cd139 Maintainer: lacatoire Status: ready -->

<sect1 xml:id="control-structures.declare" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>declare</title>
<?phpdoc print-version-for="declare"?>
<para>
Il costrutto <literal>declare</literal> è utilizzato per
impostare le direttive di esecuzione per un blocco di codice.
La sintassi di <literal>declare</literal> è simile a
quella di altri costrutti di controllo del flusso:
<informalexample>
<programlisting>
<![CDATA[
declare (directive)
statement
]]>
</programlisting>
</informalexample>
</para>

<para>
La sezione <literal>directive</literal> consente di impostare
il comportamento del blocco <literal>declare</literal>.
Attualmente sono riconosciute solo tre direttive:
<simplelist>
<member><link linkend="control-structures.declare.ticks"><literal>ticks</literal></link></member>
<member><link linkend="control-structures.declare.encoding"><literal>encoding</literal></link></member>
<member><link linkend="language.types.declarations.strict"><literal>strict_types</literal></link></member>
</simplelist>
</para>

<para>
Poiché le direttive vengono gestite durante la compilazione del file, solo
i valori letterali possono essere utilizzati come valori delle direttive. Non è possibile utilizzare
variabili e costanti. Per illustrare:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Questo è valido:
declare(ticks=1);

// Questo non è valido:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
La parte <literal>statement</literal> del blocco
<literal>declare</literal> verrà eseguita - come viene
eseguita e quali effetti collaterali si verificano durante l'esecuzione
possono dipendere dalla direttiva impostata nel
blocco <literal>directive</literal>.
</para>
<para>
Il costrutto <literal>declare</literal> può anche essere utilizzato nello scope
globale, influenzando tutto il codice che lo segue (tuttavia se il file con
<literal>declare</literal> è stato incluso, non influenza il file
genitore).
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// queste istruzioni sono equivalenti:

// è possibile usare questa forma:
declare(ticks=1) {
// intero script qui
}

// oppure questa:
declare(ticks=1);
// intero script qui
?>
]]>
</programlisting>
</informalexample>
</para>

<sect2 xml:id="control-structures.declare.ticks">
<title>Tick</title>
<para>Un tick è un evento che si verifica per ogni
<varname>N</varname> istruzioni tickabili di basso livello eseguite
dal parser all'interno del blocco <literal>declare</literal>.
Il valore di <varname>N</varname> è specificato
usando <code>ticks=<varname>N</varname></code>
nella sezione <literal>directive</literal> del blocco
<literal>declare</literal>.
</para>
<para>
Non tutte le istruzioni sono tickabili. Tipicamente, le espressioni
di condizione e le espressioni degli argomenti non sono tickabili.
</para>
<para>
Gli eventi che si verificano ad ogni tick sono specificati usando la funzione
<function>register_tick_function</function>. Vedere l'esempio
seguente per maggiori dettagli. È possibile che più di un evento si verifichi
per ogni tick.
</para>
<para>
<example>
<title>Esempio di utilizzo dei tick</title>
<programlisting role="php">
<![CDATA[
<?php

declare(ticks=1);

// Una funzione chiamata ad ogni evento tick
function tick_handler()
{
echo "tick_handler() called\n";
}

register_tick_function('tick_handler'); // causa un evento tick

$a = 1; // causa un evento tick

if ($a > 0) {
$a += 2; // causa un evento tick
print $a; // causa un evento tick
}

?>
]]>
</programlisting>
</example>
</para>
<simpara>
Vedere anche <function>register_tick_function</function> e
<function>unregister_tick_function</function>.
</simpara>
</sect2>
<sect2 xml:id="control-structures.declare.encoding">
<title>Encoding</title>
<para>
La codifica di uno script può essere specificata per ogni script usando la direttiva <literal>encoding</literal>.
<example>
<title>Dichiarazione della codifica dello script</title>
<programlisting role="php">
<![CDATA[
<?php
declare(encoding='ISO-8859-1');
// codice qui
?>
]]>
</programlisting>
</example>
</para>

<caution>
<simpara>
Quando combinata con i namespace, l'unica sintassi valida per declare
è <literal>declare(encoding='...');</literal> dove <literal>...</literal>
è il valore della codifica. <literal>declare(encoding='...') {}</literal>
genererà un errore di parsing quando combinata con i namespace.
</simpara>
</caution>
<para>
Vedere anche <link linkend="ini.zend.script-encoding">zend.script_encoding</link>.
</para>
</sect2>
</sect1>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Loading