<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.funchand.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.create-function.php',
    1 => 'create_function',
    2 => 'Crea una funci&oacute;n an&oacute;nima',
  ),
  'up' => 
  array (
    0 => 'ref.funchand.php',
    1 => 'Funciones de Manejo de Funciones',
  ),
  'prev' => 
  array (
    0 => 'function.call-user-func-array.php',
    1 => 'call_user_func_array',
  ),
  'next' => 
  array (
    0 => 'function.forward-static-call.php',
    1 => 'forward_static_call',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/funchand/functions/create-function.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.create-function" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">create_function</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.0.1, PHP 5, PHP 7)</p><p class="refpurpose"><span class="refname">create_function</span> &mdash; <span class="dc-title">Crea una función anónima</span></p>

 </div>

 <div id="function.create-function-refsynopsisdiv">
  <div class="warning"><strong class="warning">Advertencia</strong><p class="simpara">
 Esta funcionalidad está <em>OBSOLETA</em> a partir de PHP 7.2.0 y ha sido
 <em>ELIMINADA</em> a partir de PHP 8.0.0.
</p></div>
 </div>

 <div class="refsect1 description" id="refsect1-function.create-function-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>create_function</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$args</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$code</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>create_function()</strong></span> crea una función anónima,
   a partir de los argumentos pasados, y devuelve un nombre de función único.
  </p>
  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="para">
    Esta función, internamente, utiliza la función
    <span class="function"><a href="function.eval.php" class="function">eval()</a></span> y por lo tanto los requisitos
    de seguridad son idénticos a los de la función <span class="function"><a href="function.eval.php" class="function">eval()</a></span>.
    Además, el rendimiento no es óptimo y el uso de memoria
    es significativo.
   </p>
   <p class="para">
    Una <a href="functions.anonymous.php" class="link">función anónima</a> nativa
    debería ser utilizada en su lugar.
   </p>
  </div>
 </div>

 <div class="refsect1 parameters" id="refsect1-function.create-function-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   Generalmente, los argumentos <code class="parameter">args</code> son
   presentados en forma de una cadena entre comillas simples, y la misma
   recomendación aplica para <code class="parameter">code</code>.
   La razón de usar comillas simples es proteger
   los nombres de variables del reemplazo por su valor. Si se usan
   comillas dobles, no se olvide de escapar
   los nombres de variables (i.e. <code class="literal">\$avar</code>).
   <dl>
    
     <dt><code class="parameter">args</code></dt>
     <dd>
      <p class="para">
       Los argumentos de la función.
      </p>
     </dd>
    
    
     <dt><code class="parameter">code</code></dt>
     <dd>
      <p class="para">
       El código de la función.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.create-function-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Devuelve un nombre de función único, en forma de una <span class="type"><a href="language.types.string.php" class="type string">string</a></span>,
   o <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si ocurre un error.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.create-function-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 
     Creación de una función anónima con <span class="function"><strong>create_function()</strong></span>
    </strong></p>
    <div class="example-contents"><p>
     Esta función puede ser utilizada para (por ejemplo) crear
     una función a partir de información recolectada
     durante la ejecución:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$newfunc </span><span style="color: #007700">= </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #DD0000">'return "ln($a) + ln($b) = " . log($a * $b);'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Nueva función anónima: </span><span style="color: #0000BB">$newfunc</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$newfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">M_E</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// mostrará:<br />// Nueva función anónima: lambda_1<br />// ln(2) + ln(2.718281828459) = 1.6931471805599<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   O, para poder aplicar una función genérica
   a una lista de argumentos.
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 
     Procesamiento genérico por función con <span class="function"><strong>create_function()</strong></span>
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">process</span><span style="color: #007700">(</span><span style="color: #0000BB">$var1</span><span style="color: #007700">, </span><span style="color: #0000BB">$var2</span><span style="color: #007700">, </span><span style="color: #0000BB">$farr</span><span style="color: #007700">)<br />{<br />    foreach (</span><span style="color: #0000BB">$farr </span><span style="color: #007700">as </span><span style="color: #0000BB">$f</span><span style="color: #007700">) {<br />        echo </span><span style="color: #0000BB">$f</span><span style="color: #007700">(</span><span style="color: #0000BB">$var1</span><span style="color: #007700">, </span><span style="color: #0000BB">$var2</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #FF8000">// Creación de una serie de funciones matemáticas<br /></span><span style="color: #0000BB">$f1 </span><span style="color: #007700">= </span><span style="color: #DD0000">'if ($a &gt;=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$f2 </span><span style="color: #007700">= </span><span style="color: #DD0000">"return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$f3 </span><span style="color: #007700">= </span><span style="color: #DD0000">'if ($a &gt; 0 &amp;&amp; $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$farr </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$x,$y'</span><span style="color: #007700">, </span><span style="color: #DD0000">'return "un poco de trigonometría: ".(sin($x) + $x*cos($y));'</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$x,$y'</span><span style="color: #007700">, </span><span style="color: #DD0000">'return "una hipotenusa: ".sqrt($x*$x + $y*$y);'</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #0000BB">$f1</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #0000BB">$f2</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #0000BB">$f3</span><span style="color: #007700">)<br />    );<br /><br />echo </span><span style="color: #DD0000">"\nUso de la primera lista de funciones anónimas\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"parámetros: 2.3445, M_PI\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">process</span><span style="color: #007700">(</span><span style="color: #0000BB">2.3445</span><span style="color: #007700">, </span><span style="color: #0000BB">M_PI</span><span style="color: #007700">, </span><span style="color: #0000BB">$farr</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ahora una lista de funciones sobre cadenas de caracteres<br /></span><span style="color: #0000BB">$garr </span><span style="color: #007700">= array(<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$b,$a'</span><span style="color: #007700">, </span><span style="color: #DD0000">'if (strncmp($a, $b, 3) == 0) return "** \"$a\" '</span><span style="color: #007700">.<br />    </span><span style="color: #DD0000">'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #DD0000">'; return "CRCs: " . crc32($a) . ", ".crc32($b);'</span><span style="color: #007700">),<br />    </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">, </span><span style="color: #DD0000">'; return "similaridad (a,b) = " . similar_text($a, $b, &amp;$p) . "($p%)";'</span><span style="color: #007700">)<br />    );<br />echo </span><span style="color: #DD0000">"\nUso de la segunda lista de funciones anónimas\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">process</span><span style="color: #007700">(</span><span style="color: #DD0000">"Twas brilling and the slithy toves"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Twas the night"</span><span style="color: #007700">, </span><span style="color: #0000BB">$garr</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Uso de la primera lista de funciones anónimas
parámetros: 2.3445, M_PI
un poco de trigonometría: -1.6291725057799
una hipotenusa: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594

Uso de la segunda lista de funciones anónimas
** &quot;Twas the night&quot; and &quot;Twas brilling and the slithy toves&quot;
** Estas cadenas se parecen! (mirando los tres primeros caracteres)
CRCs: -725381282, 342550513
similaridad (a,b) = 11(45.833333333333%)</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   Pero el uso más común de las funciones lambda es la
   función de devolución de llamada, por ejemplo, al utilizar
   <span class="function"><a href="function.array-walk.php" class="function">array_walk()</a></span> o <span class="function"><a href="function.usort.php" class="function">usort()</a></span>
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Uso de funciones anónimas como función de devolución de llamada</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$av </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"la "</span><span style="color: #007700">, </span><span style="color: #DD0000">"una "</span><span style="color: #007700">, </span><span style="color: #DD0000">"cette "</span><span style="color: #007700">, </span><span style="color: #DD0000">"une certaine "</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">array_walk</span><span style="color: #007700">(</span><span style="color: #0000BB">$av</span><span style="color: #007700">, </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'&amp;$v,$k'</span><span style="color: #007700">, </span><span style="color: #DD0000">'$v = $v . "maison";'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$av</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
  [0] =&gt; la maison
  [1] =&gt; une maison
  [2] =&gt; cette maison
  [3] =&gt; une certaine maison
)</pre>
</div>
    </div>
    <div class="example-contents"><p>
     un array de cadenas de caracteres ordenadas de la más corta a la más larga
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$sv </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"petite"</span><span style="color: #007700">, </span><span style="color: #DD0000">"longue"</span><span style="color: #007700">, </span><span style="color: #DD0000">"une très longue chaîne"</span><span style="color: #007700">, </span><span style="color: #DD0000">"une phrase toute entière"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$sv</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
  [0] =&gt; petite
  [1] =&gt; longue
  [2] =&gt; une très longue chaîne
  [3] =&gt; une phrase toute entière
)</pre>
</div>
    </div>
    <div class="example-contents"><p>
     ordenadas de la más larga a la más corta
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />usort</span><span style="color: #007700">(</span><span style="color: #0000BB">$sv</span><span style="color: #007700">, </span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'$a,$b'</span><span style="color: #007700">,</span><span style="color: #DD0000">'return strlen($b) - strlen($a);'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$sv</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
  [0] =&gt; une phrase toute entière
  [1] =&gt; une très longue chaîne
  [2] =&gt; longue
  [3] =&gt; petite
)</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.create-function-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="functions.anonymous.php" class="link">Funciones anónimas</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>