-
Notifications
You must be signed in to change notification settings - Fork 146
/
eval.xml
173 lines (163 loc) · 5.53 KB
/
eval.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 78d17c25eeecc78cb7098b1a01d42391e36af2c1 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<refentry xml:id="function.eval" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>eval</refname>
<refpurpose>Exécute une chaîne comme un script PHP</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>eval</methodname>
<methodparam><type>string</type><parameter>code</parameter></methodparam>
</methodsynopsis>
<para>
Évalue le <parameter>code</parameter> fourni comme étant du code PHP.
</para>
<para>
Le code en cours d'évaluation hérite de la
<link linkend="language.variables.scope">portée des variables</link>
de la ligne sur laquelle l'appel à <function>eval</function> a lieu.
Toutes les variables disponibles à cette ligne seront accessibles en lecture et
modification dans le code évalué.
Cependant, toutes les fonctions et classes définies seront définies dans l'espace de noms global.
En d'autres termes, le compilateur considère le code évalué comme s'il s'agissait d'un
fichier <link linkend="function.include">inclus</link> séparé.
</para>
<caution>
<para>
La construction de langage <function>eval</function> est
<emphasis>très dangereuse</emphasis> car elle autorise l'exécution
de code PHP arbitraire. <emphasis>Son utilisation est vivement
déconseillée.</emphasis> Si vous avez soigneusement vérifié qu'il
n'y a pas d'autres options que de l'utiliser, gardez une attention
toute particulière <emphasis>à ne pas y passer de données provenant
d'un utilisateur</emphasis> sans les avoir précédemment validées
minutieusement.
</para>
</caution>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>code</parameter></term>
<listitem>
<para>
Code PHP valide à évaluer.
</para>
<para>
Le code ne doit pas être entouré de
<link linkend="language.basic-syntax.phpmode">balises PHP</link>
ouvrante et fermante, i.e. <literal>'echo "Hi!";'</literal>
doit être passé au lieu de
<literal>'<?php echo "Hi!"; >'</literal>.
Il est toujours possible de quitter et de retourner en mode PHP
en utilisant les balises PHP appropriées, i.e.
<literal>'echo "En mode PHP !"; ?>En mode HTML !<?php echo "Retour en mode PHP !";'</literal>.
</para>
<para>
Mis à part cela, le code PHP passé doit être valide. Ceci inclut que toutes les
instructions doivent se terminer par un point-virgule.
<literal>'echo "Hi!"'</literal> par exemple résultera en une erreur fatale, alors que
<literal>'echo "Hi!";'</literal> fonctionnera.
</para>
<para>
Une instruction <literal>return</literal> terminera immédiatement l'évaluation du code.
</para>
<para>
Le code sera exécuté dans le scope du code appelant la fonction
<function>eval</function>. Aussi, toutes les variables définies ou modifiées
dans l'appel à la fonction <function>eval</function> resteront visibles après
la fin de l'exécution de la fonction.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<function>eval</function> retourne &null; sauf si
<literal>return</literal> est appelé dans le code évalué,
auquel cas la valeur passée à <literal>return</literal>
est retournée. À partir de PHP 7, s'il y a une erreur de syntaxe dans
le code évalué, <function>eval</function> lance une exception <classname>ParseError</classname>.
Avant PHP 7, dans ce cas <function>eval</function> retourne &false;
et l'exécution du code suivant continue normalement. Il
n'est pas possible d'attraper l'erreur d'analyse de la
fonction <function>eval</function> en utilisant la fonction
<function>set_error_handler</function>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemple avec <function>eval</function> - concaténation de texte</title>
<programlisting role="php">
<![CDATA[
<?php
$string = 'tasse';
$name = 'café';
$str = 'Ceci est une $string avec mon $name dedans.<br />';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Ceci est une $string avec mon $name dedans.
Ceci est une tasse avec mon café dedans.
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.language-construct;
&tip.ob-capture;
<note>
<para>
Dans le cas d'une erreur fatale dans le code évalué, l'ensemble du script se
terminera.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>call_user_func</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->