Files
doc-fr/language/control-structures/declare.xml
2021-09-05 13:55:02 +01:00

194 lines
5.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 17297101a4e423420de52d6ef389403bfbd3cf7f Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<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>
L'élément de langage <literal>declare</literal> sert à ajouter des
directives d'exécutions dans un bloc de code. La syntaxe de
<literal>declare</literal> est similaire à la syntaxe des autres
fonctions de contrôle :
<informalexample>
<programlisting>
<![CDATA[
declare (directive)
commandes
]]>
</programlisting>
</informalexample>
</para>
<para>
L'expression <literal>directive</literal> permet de contrôler l'intervention
du bloc <literal>declare</literal>. Actuellement, seulement trois directives
sont reconnues : la directive <literal>ticks</literal> (voir plus bas pour
plus de détails sur les
<link linkend="control-structures.declare.ticks">ticks</link>), la directive
d'encodage <literal>encoding</literal> (Voir plus bas pour plus de détails sur
la directive
<link linkend="control-structures.declare.encoding">encoding</link>) et la
directive <literal>strict_types</literal> (Voir la section
<link linkend="language.types.declarations.strict">Typage strict</link>
sur la page de déclaration de type).
</para>
<para>
Comme les directives sont gérées lors de la compilation du fichier, seulement
les littéraux peuvent être utilisés comme valeur de ces directives. Les variables
et constantes ne peuvent pas être utilisées. Pour illustrer :
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Ceci est correct:
declare(ticks=1);
// Ceci est incorrect:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
L'expression <literal>commandes</literal> du bloc de
<literal>declare</literal> sera exécutée. Comment elle sera exécutée,
et quels effets cela aura, dépend de la directive utilisée dans le bloc
<literal>directive</literal>.
</para>
<para>
La structure <literal>declare</literal> peut aussi être utilisée
dans le contexte global. Elle affecte alors tout le code qui la
suit (même si le fichier avec <literal>declare</literal> a été
inclus après, ça n'affecte pas le fichier parent).
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Ces déclarations sont identiques.
// Vous pouvez utiliser ceci
declare(ticks=1) {
// script entier ici
}
// ou ceci
declare(ticks=1);
// script entier ici
?>
]]>
</programlisting>
</informalexample>
</para>
<sect2 xml:id="control-structures.declare.ticks">
<title>Ticks</title>
<para>
Un tick est un événement qui intervient toutes les <varname>N</varname>
commandes bas niveau tickables, exécutées par l'analyseur dans le bloc de
<literal>declare</literal>. La valeur de <varname>N</varname> est spécifiée
par la syntaxe <code>ticks=<varname>N</varname></code> dans le bloc de
directive <literal>declare</literal>.
</para>
<para>
Toutes les commandes ne sont pas tickables. Typiquement,
les expressions de condition et les expressions d'arguments
ne sont pas tickables.
</para>
<para>
Un événement qui intervient à chaque tick est spécifié avec la fonction
<function>register_tick_function</function>. Reportez-vous à l'exemple
ci-dessous pour plus de détails. Notez que plus d'un événement peut
intervenir par tick.
</para>
<para>
<example>
<title>Exemple d'utilisation des ticks</title>
<programlisting role="php">
<![CDATA[
<?php
declare(ticks=1);
// A function called on each tick event
function tick_handler()
{
echo "tick_handler() called\n";
}
register_tick_function('tick_handler'); // causes a tick event
$a = 1; // causes a tick event
if ($a > 0) {
$a += 2; // causes a tick event
print($a); // causes a tick event
}
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Voir aussi <function>register_tick_function</function> et
<function>unregister_tick_function</function>.
</simpara>
</sect2>
<sect2 xml:id="control-structures.declare.encoding">
<title>L'encodage</title>
<para>
L'encodage d'un script peut être spécifié par script en utilisant la
directive <literal>encoding</literal>.
<example>
<title>Déclaration d'un encodage pour un script</title>
<programlisting role="php">
<![CDATA[
<?php
declare(encoding='ISO-8859-1');
// le code
?>
]]>
</programlisting>
</example>
</para>
<caution>
<simpara>
Combinée avec les espaces de nommage, la seule syntaxe valable pour declare
est <literal>declare(encoding='...');</literal><literal>...</literal>
est la valeur de l'encodage. <literal>declare(encoding='...') {}</literal>
soulèvera une erreur d'interprétation dans le cas des espaces de nommage.
</simpara>
</caution>
<para>
Voir aussi
<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
-->