mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 00:12:06 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337136 c90b9560-bf6c-de11-be94-00142212c4b1
278 lines
7.5 KiB
XML
278 lines
7.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 623b4076b752ce00ba937d9d3b03975f5cdc25c3 Maintainer: jpberdejo Status: ready -->
|
|
<!-- Reviewed: no Maintainer: seros -->
|
|
|
|
<sect1 xml:id="control-structures.switch" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title><literal>switch</literal></title>
|
|
<?phpdoc print-version-for="switch"?>
|
|
<simpara>
|
|
La sentencia <literal>switch</literal> es similar a una serie de
|
|
sentencias IF en la misma expresión. En muchas ocasiones, es posible que
|
|
se quiera comparar la misma variable (o expresión) con muchos
|
|
valores diferentes, y ejecutar una parte de código distinta dependiendo
|
|
de a que valor es igual. Para esto es exactamente la
|
|
expresión <literal>switch</literal>.
|
|
</simpara>
|
|
<note>
|
|
<simpara>
|
|
Cabe señalar que a diferencia de algunos otros lenguajes, la sentencia
|
|
<link linkend="control-structures.continue">continue</link> se aplica
|
|
a switch y actúa de manera similar a <literal>break</literal>. Si se
|
|
tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración de
|
|
del ciclo exterior, se utiliza <literal>continue 2</literal>.
|
|
</simpara>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Tener en cuenta que switch/case hace
|
|
<link linkend="types.comparisions-loose">comparaciones flexibles</link>.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
<table>
|
|
&reftitle.changelog;
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>&Version;</entry>
|
|
<entry>&Description;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7.0.0</entry>
|
|
<entry>
|
|
Múltiples casos predeterminados (default) emitirán un error de tipo <constant>E_COMPILE_ERROR</constant>.
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
<para>
|
|
Los dos ejemplos siguientes son dos formas diferentes de escribir lo
|
|
mismo, uno con una serie de sentencias <literal>if</literal> y
|
|
<literal>elseif</literal>, y el otro usando la
|
|
sentencia <literal>switch</literal>:
|
|
<example>
|
|
<title>Estructura <literal>switch</literal></title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if ($i == 0) {
|
|
echo "i es igual a 0";
|
|
} elseif ($i == 1) {
|
|
echo "i es igual a 1";
|
|
} elseif ($i == 2) {
|
|
echo "i es igual a 2";
|
|
}
|
|
|
|
switch ($i) {
|
|
case 0:
|
|
echo "i es igual a 0";
|
|
break;
|
|
case 1:
|
|
echo "i es igual a 1";
|
|
break;
|
|
case 2:
|
|
echo "i es igual a 2";
|
|
break;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>Estrutura <literal>switch</literal> permite el uso de strings</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch ($i) {
|
|
case "manzana":
|
|
echo "i es una manzana";
|
|
break;
|
|
case "barra":
|
|
echo "i es una barra";
|
|
break;
|
|
case "pastel":
|
|
echo "i es un pastel";
|
|
break;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Es importante entender cómo la sentencia <literal>switch</literal>
|
|
es ejecutada con el fin de evitar errores. La
|
|
sentencia <literal>switch</literal> ejecuta línea por línea
|
|
(en realidad, sentencia por sentencia). Al principio, ningún código es
|
|
ejecutado. Sólo cuando una sentencia <literal>case</literal> es encontrada
|
|
con un valor que coincide con el valor de la
|
|
sentencia <literal>switch</literal>, PHP comienza a ejecutar la
|
|
sentencias. PHP continúa ejecutando las sentencias hasta el final
|
|
del bloque <literal>switch</literal>, o hasta la primera vez que vea
|
|
una sentencia <literal>break</literal>. Si no se escribe una
|
|
sentencia <literal>break</literal> al final de la lista de sentencias
|
|
de un caso, PHP seguirá ejecutando las sentencias del
|
|
caso siguiente. Por ejemplo:
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch ($i) {
|
|
case 0:
|
|
echo "i es igual a 0";
|
|
case 1:
|
|
echo "i es igual a 1";
|
|
case 2:
|
|
echo "i es igual a 2";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<simpara>
|
|
Aquí, si <varname>$i</varname> es igual a 0, PHP ejecutaría todas las sentencias
|
|
echo! Si <varname>$i</varname> es igual a 1, PHP ejecutaría las últimas dos
|
|
sentencias echo. Se obtendría el comportamiento esperado (se mostraría
|
|
'i es igual a 2') sólo si <varname>$i</varname> es igual a 2. Por lo tanto,
|
|
es importante no olvidar las sentencias <literal>break</literal>
|
|
(aunque es posible que se desee evitar proporcionarlas a propósito bajo
|
|
determinadas circunstancias).
|
|
</simpara>
|
|
<simpara>
|
|
En una sentencia <literal>switch</literal>, la condición es
|
|
evaluada sólo una vez y el resultado es comparado con cada una de las
|
|
sentencias <literal>case</literal>. En una sentencia <literal>elseif</literal>,
|
|
la condición es evaluada otra vez. Si la condición es
|
|
más complicada que una simple comparación y/o está en un bucle estrecho,
|
|
un <literal>switch</literal> puede ser más rápido.
|
|
</simpara>
|
|
<para>
|
|
La lista de sentencias para un caso también puede estar vacía, lo cual simplemente
|
|
pasa el control a la lista de sentencias para el siguiente caso.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch ($i) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
echo "i es menor que 3 pero no negativo";
|
|
break;
|
|
case 3:
|
|
echo "i es 3";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Un caso especial es el <literal>default</literal>. Este caso coincide
|
|
con cualquier cosa que no se haya correspondido por los otros casos. Por ejemplo:
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch ($i) {
|
|
case 0:
|
|
echo "i es igual a 0";
|
|
break;
|
|
case 1:
|
|
echo "i es igual a 1";
|
|
break;
|
|
case 2:
|
|
echo "i es igual a 2";
|
|
break;
|
|
default:
|
|
echo "i no es igual a 0, 1 ni 2";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
La expresión <literal>case</literal> puede ser cualquier expresión que
|
|
se evalúa como un tipo simple, es decir, entero o números de
|
|
punto flotante y strings. Los arrays u objetos no se pueden utilizar aquí a menos que
|
|
sean desreferenciados a un tipo simple.
|
|
</para>
|
|
<para>
|
|
La sintaxis alternativa para las estructuras de control es compatible con los
|
|
switch. Para obtener más información, consulte <link
|
|
linkend="control-structures.alternative-syntax">Sintaxis alternativa
|
|
de estructuras de control</link>.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch ($i):
|
|
case 0:
|
|
echo "i es igual a 0";
|
|
break;
|
|
case 1:
|
|
echo "i es igual a 1";
|
|
break;
|
|
case 2:
|
|
echo "i es igual a 2";
|
|
break;
|
|
default:
|
|
echo "i no es igual a 0, 1 ni 2";
|
|
endswitch;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Es posible utilizar un punto y coma en lugar de dos puntos después de un caso como:
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
switch($beer)
|
|
{
|
|
case 'tuborg';
|
|
case 'carlsberg';
|
|
case 'heineken';
|
|
echo 'Buena elección';
|
|
break;
|
|
default;
|
|
echo 'Por favor haga una nueva selección...';
|
|
break;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</sect1>
|
|
|
|
<!-- 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
|
|
-->
|