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>