-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy patheval.xml
154 lines (145 loc) · 4.88 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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a0a0165e07a83d74a66c316d52b04c1f4bf52aeb Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.eval" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>eval</refname>
<refpurpose>Evaluar una cadena como código de 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>
Evalua el código dado por <parameter>code</parameter> como código PHP.
</para>
<caution>
<para>
El constructor de lenguaje <function>eval</function> es <emphasis>muy peligroso</emphasis>
porque permite la ejecución de código de PHP arbitrario. <emphasis>Su uso está totalmente
desaconsejado.</emphasis> Si se ha verificado cuidadosamente que no existe otra opción
que usar este constructor, se ha de poner especial atención en <emphasis>no pasar ninguna
información proporcionada por el usuario</emphasis> a esta función sin haberla validado apropiadamente con anterioridad.
</para>
</caution>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>code</parameter></term>
<listitem>
<para>
El código de PHP válido ser evaluado.
</para>
<para>
El código no debe encerrarse entre
<link linkend="language.basic-syntax.phpmode">etiquetas de PHP</link> de apertura y cierre,
es decir, se debe pasar <literal>'echo "¡Hola!";'</literal> en vez de
<literal>'<?php echo "¡Hola!"; ?>'</literal>. Aún es posible abandonar y
reentrar en el modo PHP usando las etiquetas de PHP apropiadas, p.ej.
<literal>'echo "¡En el modo PHP!"; ?>¡En el modo HTML!<?php echo "¡De vuelta en el modo PHP!";'</literal>.
</para>
<para>
Aparte de que el código pasado debe ser código de PHP válido. Esto incluye que todas las sentencias
deben finalizar apropiadamente usando un punto y coma.
<literal>'echo "¡Hola!"'</literal>, por ejemplo, causará un error de análisis, mientras que
<literal>'echo "¡Hola!";'</literal> funcionará.
</para>
<para>
Una sentencia <literal>return</literal> finalizará inmediantamente la
evaluación del código.
</para>
<para>
El código se ejecutará en el ámbito del código que llama a <function>eval</function>. Así, cualquier
variable definida o cambiada en la llamada a <function>eval</function> permanecerá visible después de que
finalice.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<function>eval</function> devuelve &null; a menos que
se llame a <literal>return</literal> en el código evaluado, en cuyo caso
el valor pasado a <literal>return</literal> es devuelto. A partir de PHP 7, si hay un
error de análisis en el código evaluado, <function>eval</function> lanzará una excepción ParseError.
Antes de PHP 7, <function>eval</function> devolvía
&false; y la ejecución del código posterior continuaba normalmente. No es
posible capturar un error de análisis de <function>eval</function>
usando <function>set_error_handler</function>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Ejemplo de <function>eval</function> - fusión de texto sencillo</title>
<programlisting role="php">
<![CDATA[
<?php
$cadena = 'taza';
$nombre = 'café';
$str = 'Esto es una $cadena con mi $nombre en ella.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Esto es una $cadena con mi $nombre en ella.
Esto es una taza con mi café en ella.
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.language-construct;
&tip.ob-capture;
<note>
<para>
En caso de un error fatal en el código evaluado, se saldrá del script completamente.
</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
-->