dams Tue Jul 24 04:33:02 2001 EDT Modified files: /phpdoc/fr/language control-structures.xml Log: Adding "declare" entry
Index: phpdoc/fr/language/control-structures.xml diff -u phpdoc/fr/language/control-structures.xml:1.13 phpdoc/fr/language/control-structures.xml:1.14 --- phpdoc/fr/language/control-structures.xml:1.13 Sat Jul 7 18:22:33 2001 +++ phpdoc/fr/language/control-structures.xml Tue Jul 24 04:33:01 2001 @@ -22,7 +22,7 @@ <informalexample> <programlisting role="php"> <?php -if (expression) + if (expression) commandes ?> </programlisting> @@ -42,7 +42,7 @@ <informalexample> <programlisting role="php"> <?php -if ($a > $b) + if ($a > $b) print "a est plus grand que b"; ?> </programlisting> @@ -52,7 +52,7 @@ Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel. Bien évidemment, il n'est pas obligatoire de répéter - l'instruction conditonnelle autant de fois que vous avez d'instructions + l'instruction conditionnelle autant de fois que vous avez d'instructions à exécuter. A la place, vous pouvez rassembler toutes les instructions dans un bloc. L'exemple suivant affiche <computeroutput>a est plus grand que b</computeroutput>, et assigne la valeur de la @@ -82,7 +82,7 @@ Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre instruction si cette condition n'est pas remplie. C'est à cela que sert <literal>else</literal>. - <literal>else</literal> fonctionne avec après un + <literal>else</literal> fonctionne après un <literal>if</literal> et exécute les instructions correspondantes au cas oú l'expression du <literal>if</literal> est &false;. Dans l'exemple suivant, ce bout de code @@ -111,7 +111,7 @@ <title><literal>elseif</literal></title> <para> <literal>elseif</literal>, comme son nom l'indique, est une combinaison - de <literal>if</literal> et <literal>else</literal>. Comme l'expression + de <literal>if</literal> et de <literal>else</literal>. Comme l'expression <literal>else</literal>, il permet d'exécuter une instruction aprè un <literal>if</literal> dans le cas oú le "premier" if est évalué comme &false;. Mais, @@ -156,11 +156,23 @@ <sect1 id="control-structures.alternative-syntax"> <title>Syntaxe alternative</title> <para> + <warning> + <simpara> + Cette syntaxe alternative est obsolète depuis PHP 4. Elle +génère + un code qui est tout simplement illisible, et il est très difficile + de la combiner avec la syntaxe normale. Bien que cela ne soit pas + à l'ordre du jour aujourd'hui, cette syntaxe risque de disrparaitre + à terme. Soyez prévenus. + </simpara> + </warning> + </para> + <para> Le PHP propose une autre manière de rassembler des instructions à l'intérieur d'un bloc, pour les fonctions de contrôle <literal>if</literal>, - <literal>while</literal>, <literal>for</literal>, et - <literal>switch</literal>. Dans chaque cas, le principe + <literal>while</literal>, <literal>for</literal>, + <literal>foreach</literal> et <literal>switch</literal>. + Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par, respectivement, <literal>endif;</literal>, <literal>endwhile;</literal>, @@ -289,7 +301,7 @@ est vérifiée au début de chaque itération). </simpara> <para> - Il n'y a qu'un syntaxe possible pour les boucles <literal>do..while</literal>: + Il n'y a qu'une syntaxe possible pour les boucles <literal>do..while</literal>: <informalexample> <programlisting role="php"> <?php @@ -439,22 +451,22 @@ <link linkend="control-structures.foreach">foreach</link>). En PHP 3, vous pouvez combiner <link linkend="control-structures.while">while</link> avec <function>list</function> et <function>each</function> pour - obtenir le même résultat. Reportez vous aux exemples + obtenir le même résultat. Reportez-vous aux exemples de la documentation. </para> </sect1> <sect1 id="control-structures.foreach"> <title><literal>foreach</literal></title> <para> - PHP 4 (mais pas PHP 3) inclus une commande <literal>foreach</literal>, + PHP 4 (mais pas PHP 3) inclut une commande <literal>foreach</literal>, comme en Perl ou d'autres langages. C'est un moyen simple de passer en revue un tableau. Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première: <informalexample> <programlisting role="php"> <?php -foreach(array_expression as $value) commandes -foreach(array_expression as $key => $value) commandes + foreach(array_expression as $value) commandes + foreach(array_expression as $key => $value) commandes ?> </programlisting> </informalexample> @@ -462,10 +474,10 @@ <simpara> La première forme passe en revue le tableau <literal>array_expression</literal>. A chaque itération, - la valeur de l'élément courant est assigné à + la valeur de l'élément courant est assignée à <literal>$value</literal> et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à - la prochaîne itération, on accédera à + la prochaine itération, on accédera à l'élément suivant). </simpara> <simpara> @@ -474,25 +486,42 @@ assigné à la variable <literal>$key</literal>. </simpara> <simpara> - Lorsque <literal>foreach</literal> démare, le pointeur interne + Lorsque <literal>foreach</literal> démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à <function>reset</function> avant <literal>foreach</literal>. </simpara> + <note> + <para> + De plus, notez que <literal>foreach</literal> travaille sur une copie + du tableau spécifié, et pas sur le tableau lui-même. + Par conséquent, + le pointeur de tableau n'est pas modifié, comme il le serait + avec le fonction <function>each</function>, et les modifications + faites dans le tableau ne seront pas prises en compte dans le + tableau original. + </para> + </note> + <note> + <para> + <literal>foreach</literal> n'accepte pas l'opérateur de supppression + des erreurs <link linkend="language.operators.errorcontrol">@</link>. + </para> + </note> <para> Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique : <informalexample> <programlisting role="php"> <?php -reset($arr); -while (list(, $value) = each ($arr)) { + reset($arr); + while (list(, $value) = each ($arr)) { echo "Valeur: $value<br>\n"; -} -foreach ($arr as $value) { + } + foreach ($arr as $value) { echo "Valeur: $value<br>\n"; -} + } ?> </programlisting> </informalexample> @@ -500,13 +529,13 @@ <informalexample> <programlisting role="php"> <?php -reset($arr); -while (list($key, $value) = each ($arr)) { + reset($arr); + while (list($key, $value) = each ($arr)) { echo "Clé: $key; Valeur: $value<br>\n"; -} -foreach ($arr as $key => $value) { + } + foreach ($arr as $key => $value) { echo "Clé: $key; Valeur: $value<br>\n"; -} + } ?> </programlisting> </informalexample> @@ -516,18 +545,18 @@ <informalexample> <programlisting role="php"> <?php -/* exemple 1: valeur seule */ +/* exemple 1: valeurs seules */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Valeur courante de \$a: $v.\n"; } -/* exemple 1: valeur (avec clé associée) */ +/* exemple 2: valeurs (avec la clé correspondante) */ $a = array (1, 2, 3, 17); -$i = 0; /* pour affichage seulement*/ +$i = 0; /* pour l'illustration uniquement */ foreach($a as $v) { print "\$a[$i] => $v.\n"; } -/* exemple 1: valeur et clé */ +/* exemple 3: clé et valeur */ $a = array ( "un" => 1, "deux" => 2, @@ -537,6 +566,20 @@ foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } +/* exemple 4: tableaux multi-dimensionnels */ +$a[0][0] = "a"; +$a[0][1] = "b"; +$a[1][0] = "y"; +$a[1][1] = "z"; +foreach($a as $v1) { + foreach ($v1 as $v2) { + print "$v2\n"; + } +} +/* exemple 5: tableaux dynamique */ +foreach(array(1, 2, 3, 4, 5) as $v) { + print "$v\n"; +} ?> </programlisting> </informalexample> @@ -546,11 +589,12 @@ <title><literal>break</literal></title> <simpara> L'instruction <literal>break</literal> permet de sortir d'une structure - <literal>for</literal>, <literal>while</literal>, ou <literal>switch</literal>. + <literal>for</literal>, <literal>while</literal>, + <literal>foreach</literal> ou <literal>switch</literal>. </simpara> <simpara> <literal>break</literal> accepte un argument numérique optionnel - qui vous indiquera combien de structures emboîtées ont + qui vous indiquera combien de structures emboitées ont été interrompues. </simpara> <para> @@ -594,7 +638,7 @@ <simpara> <literal>continue</literal> accepte un argument numérique optionnel qui vous indiquera combien de structures - emboîtées ont été ignorées. + emboitées ont été ignorées. </simpara> <para> <informalexample> @@ -703,15 +747,15 @@ exécuter quand même toutes les instructions qui suivent. Si $i est égal à 1, PHP exécutera les deux dernières instructions. Et seulement si $i est - égal à, vous obtiendrez le résultat + égal à 2, vous obtiendrez le résultat escompté, c'est-à-dire, l'affiche de - "i égal 2. Donc, l'important est de ne pas oublier - l'instruction <literal>break</literal> (même si il est + "i égal 2". Donc, l'important est de ne pas oublier + l'instruction <literal>break</literal> (même s'il est possible que vous l'omettiez dans certaines circonstances). </simpara> <simpara> Dans une commande <literal>switch</literal>, une condition n'est - évaluée qu'une fois, est le résultat est + évaluée qu'une fois, et le résultat est comparé à chaque <literal>case</literal>. Dans une structure <literal>elseif</literal>, les conditions sont évaluées à chaque comparaison. Si votre @@ -720,7 +764,7 @@ <literal>switch</literal> sera plus rapide. </simpara> <para> - La liste de commande d'un <literal>case</literal> peut + La liste de commandes d'un <literal>case</literal> peut être vide, auquel cas PHP utilisera la liste de commandes du cas suivant. <informalexample> @@ -768,8 +812,8 @@ Une autre chose à mentionner est que l'instruction <literal>case</literal> peut être une expression à de type scalaire, c'est-à-dire nombre entier, nombre - à virgule flottante et chaîne de caractère. - Les tableaux sont sans interêt dans ce contexte-là. + à virgule flottante et chaîne de caractères. + Les tableaux sont sans intérêt dans ce contexte-là. </para> <para> La syntaxe alternative pour cette structure de contrôle est @@ -778,7 +822,7 @@ <informalexample> <programlisting role="php"> <?php -switch ($i): + switch ($i): case 0: print "i égale 0"; break; @@ -790,16 +834,116 @@ break; default: print "i n'est ni égal à 2, ni à 1, ni à 0"; -endswitch; + endswitch; ?> </programlisting> </informalexample> </para> </sect1> + <sect1 id="control-structures.declare"> + <title><literal>declare</literal></title> + <para> + L'élément de langage <literal>declare</literal> sert à +ajouter des + directives d'éxécutions dans un bloc de code. La syntaxe de + <literal>declare</literal> est similaire à la syntaxe des autres + fonctions de contrôle : + <informalexample> + <programlisting> +<?php + declare (directive) statement +?> + </programlisting> + </informalexample> + </para> + <para> + L'expression <literal>directive</literal> permet de contrôler l'intervention + du bloc <literal>declare</literal>. Actuellement, une seule directive + est reconnue : la directive <literal>ticks</literal> (Voir plus bas pour plus + de détails) sur les <link +linkend="control-structures.declare.ticks">ticks</link>). + </para> + <para> + L'expression <literal>statement</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> + <sect2 id="control-structures.declare.ticks"> + <title>Ticks</title> + <para> + Un tick est un événement qui intervient toutes les + <replaceable>N</replaceable> commandes bas niveau, exécutées par +l'analyseur + dans le bloc de <literal>declare</literal>. + La valeur de <replaceable>N</replaceable> est spécifiée avec la +syntaxe + <literal>ticks=<replaceable>N</replaceable></literal> + dans le bloc de directive <literal>declare</literal>. + </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> + <informalexample> + <programlisting role="php"> +<PRE> +<?php +// Un fonction qui enregistre l'heure à laquelle elle est appelée + function profile($dump = FALSE){ + static $profile; + // Retourne les horaires stockés dans le profile, et l'efface + if ($dump) { + $temp = $profile; + unset ($profile); + return ($temp); + } + $profile[] = microtime (); + } +// Enregistre un gestionnaire de tick + register_tick_function("profile"); +// Initialise la fonction avant le bloc de déclaration + profile(); +// Exécute un bloc de code, et appele un tick toutes les deux secondes + declare (ticks=2) { + for ($x = 1; $x < 50; ++$x) { + echo similar_text(md5($x), md5($x*$x)), "<br>"; + } + } +?> + </programlisting> + </informalexample> + Pour voir le résultat : + <informalexample> + <programlisting role="php"> +<?php +// Affiche les données de la variable $profile + print_r(profile(TRUE)); +?> +</pre> + </programlisting> + </informalexample> + Cet exemple profile le code PHP dans le bloc de déclaration, + et enregistre l'heure de chaque commande bas niveau. Cette + information peut être réutilisée pour débusquer les +segments + de code lents. Vous pouvez implémenter d'autres méthodes, mais + les ticks sont plus rapides et plus efficaces. + </para> + <simpara> + Les ticks sont bien pratiques pour débugger, implémenter un + multi-tâches simple, des entrées sorties en tâche de + fond, ou bien d'autres choses, avec PHP. + </simpara> + <simpara> + Voir aussi + <function>register_tick_function</function> et + <function>unregister_tick_function</function>. + </simpara> + </sect2> + </sect1> <sect1 id="function.require"> <title><function>require</function></title> <simpara> - La commande <function>require</function> se remplace elle même + La commande <function>require</function> se remplace elle-même par le contenu du fichier spécifié, comme les préprocesseurs C le font avec la commande <literal>#include</literal>. </simpara> @@ -814,12 +958,12 @@ </simpara> <simpara> <function>require</function> n'est pas vraiment une fonction PHP : - c'est plus un instruction du langage. Elle ne fonctionne pas comme + c'est plus une instruction du langage. Elle ne fonctionne pas comme les fonctions standards. Par exemple, <function>require</function> - ne peut pas contenir d'autres structures de contrôle. De plus, - il ne retourne aucune valeur. Lire une valeur retournée par un - <function>require</function> retourne une erreur - d'analyse. + est indépendante des structures de contrôle (cela ne sert à +rien + de la placer dans une condition, elle sera toujours exécutée). De +plus, + elle ne retourne aucune valeur. Lire une valeur retournée par un + <function>require</function> retourne une erreur d'analyse. </simpara> <simpara> Contrairement à <function>include</function>, @@ -847,25 +991,27 @@ <informalexample> <programlisting role="php"> <?php -require ('header.inc'); + require('header.inc'); ?> </programlisting> </informalexample> </para> <para> Attention : <function>include</function> et - <function>require</function> ajoute le contenu du fichier cible - dans le script lui-même. Elle n'utilise pas le protocole + <function>require</function> ajoutent le contenu du fichier cible + dans le script lui-même. Elles n'utilisent pas le protocole HTTP ou tout autre protocole. Toute variable qui est dans le champs du script sera accessible dans le fichier d'inclusion, - et vice versa. + et vice-versa. <informalexample> <programlisting role="php"> <?php -require ("file.inc?varone=1&vartwo=2"); /* Ne fonctionne pas. */ -$varone = 1; -$vartwo = 2; -require ("file.inc"); /* $varone et $vartwo seront accessible à file.inc */ + require ("file.inc?varone=1&vartwo=2"); +/* Ne fonctionne pas. */ + $varone = 1; + $vartwo = 2; + require ("file.inc"); +/* $varone et $vartwo seront accessibles à file.inc */ ?> </programlisting> </informalexample> @@ -879,7 +1025,7 @@ </simpara> <simpara> En PHP 3, il est possible d'exécuter une commande - <literal>return</literal> depuis un fichier inclus, tant + <literal>return</literal> depuis un fichier inclut, tant que cette commande intervient au niveau global du fichier inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}). En PHP 4, cette possibilité a été @@ -904,9 +1050,9 @@ habituelles de PHP</link>. </simpara> <para> - Cela a lieu à chaque fois que la fonction - <function>include</function> est rencontrée. Donc vous - vous pouvez utiliser la fonction <function>include</function> + Cela se produit à chaque fois que la fonction + <function>include</function> est rencontrée. Donc, vous + pouvez utiliser la fonction <function>include</function> dans une boucle pour inclure un nombre infini de fois un fichier, ou même des fichiers différents. <informalexample> @@ -928,18 +1074,18 @@ <function>require</function> est remplacée par le fichier cible lors de la première exécution, que son contenu soit utilisé - ou non. De plus, cela se fait même si il + ou non. De plus, cela se fait même s'il est placé dans une structure conditionnelle, comme dans un <link linkend="control-structures.if">if</link>). </para> <para> - Parce que la fonction <function>include</function> nécessite + Parceque la fonction <function>include</function> nécessite une construction particulière, vous devez l'inclure dans un - bloc si elle est inclue dans une structure conditionnelle. + bloc si elle est incluse dans une structure conditionnelle. <informalexample> <programlisting role="php"> <?php -/* Ceci est faux, et ne fonctionnera pas ce qu'on attends. */ +/* Ceci est faux, et ne fonctionnera pas comme on l'attend. */ if ($condition) include($file); else @@ -973,7 +1119,7 @@ et est placé dans le même dossier que le fichier principal : <programlisting role="php"> -<?;php +<?php echo "Avant le retour<br>\n"; if (1) { return 27; @@ -985,7 +1131,7 @@ <para> On suppose que le fichier <filename>main.html</filename> contient ceci : <programlisting role="php"> -<?;php +<?php $retval = include ('test.inc'); echo "Fichier inclus: '$retval'<br>\n"; ?> @@ -1007,7 +1153,7 @@ été modifié et contient maintenant le code suivant : <programlisting role="php"> -<?;php +<?php include ('test.inc'); echo "Retour dans le main.html<br>\n"; ?> @@ -1029,7 +1175,7 @@ <para> L'erreur d'analyse ci-dessus est le résultat du fait que la commande <literal>return</literal> est dans un bloc qui n'est pas une fonction, dans - <filename>test.inc</filename>. Lors que le return est sorti du bloc, + <filename>test.inc</filename>. Lorsque le return est sorti du bloc, l'affichage devient : <screen> Avant le retour @@ -1046,8 +1192,8 @@ ou <function>require</function>, les erreurs d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit - être placé entre <link linkend="language.basic-syntax.phpmode"> - les balises habituelle de PHP</link>. + être placé entre + <link linkend="language.basic-syntax.phpmode">les balises habituelles de +PHP</link>. <informalexample> <programlisting role="php"> <?php @@ -1066,20 +1212,22 @@ </link> ce qui est au dessus reste vrai. </simpara> <simpara> - Voir aussi <function>readfile</function>, <function>require</function> - et <function>virtual</function>. + Voir aussi + <function>readfile</function>, + <function>require</function> et + <function>virtual</function>. </simpara> </sect1> <sect1 id="function.require-once"> <title><function>require_once</function></title> <para> - La commande <function>require_once</function> se remplace elle même + La commande <function>require_once</function> se remplace elle-même par le fichier spécifié, un peu comme les commandes de préprocesseur C <literal>#include</literal>, et ressemble sur ce point à <function>require</function>. La principale différence est qu'avec <function>require_once</function>, vous êtes assurés que ce code ne sera ajouté - qu'une seule fois, évitant de ce fait les redéfintions de + qu'une seule fois, évitant de ce fait les redéfinitions de variables ou de fonctions, génératrices d'alertes. </para> <para> @@ -1130,7 +1278,7 @@ ?> </programlisting> </example> - Lorsque vous exécutez le script ci dessus, le + Lorsque vous exécutez le script ci-dessus, le résultat sera (sous PHP 4.01pl2): <informalexample> <programlisting> @@ -1142,8 +1290,8 @@ En modifiant <literal>foolib.inc</literal> et <literal>cause_errror_require.php</literal> pour qu'elles utilisent <function>require_once</function> - au lieu de <function>require</function> et ne renommant le fichier - en <literal>avoid_error_require_once.php</literal>, on obtiend : + au lieu de <function>require</function> et ne renommant pas le fichier + en <literal>avoid_error_require_once.php</literal>, on obtient : <example> <title>foolib.inc (corrigé)</title> <programlisting role="php"> @@ -1185,9 +1333,9 @@ </para> <para> Notez aussi que, de la même manière que les - préprocesseur traitent les <literal>#include</literal>, + préprocesseurs traitent les <literal>#include</literal>, cette commande est exécutée au moment de la - compilation, c'est à dire lorsque le script est + compilation, c'est-à-dire lorsque le script est analysée, et avant qu'il soit exécuté, et ne doit pas être utilisée pour insérer des données dynamiques liées à @@ -1210,7 +1358,7 @@ <sect1 id="function.include-once"> <title><function>include_once</function></title> <para> - La commande <function>include_once</function> inclus et + La commande <function>include_once</function> inclut et évalue le fichier spécifié durant l'exécution du script. Le comportement est similaire à <function>include</function>, mais la différence est que si @@ -1223,7 +1371,7 @@ <function>include_once</function> est utilisée de préférence lorsque le fichier doit être inclus ou évalué plusieurs fois dans un script, - ou bien lorsque vous voulez être sur qu'il ne sera inclus + ou bien lorsque vous voulez être sûr qu'il ne sera inclus qu'une seule fois, pour éviter des redéfinitions de fonction. </para>