1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/language/control-structures/switch.xml
Pedro Antonio Gil Rodríguez 9766dde380 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337136 c90b9560-bf6c-de11-be94-00142212c4b1
2015-07-10 10:27:01 +00:00

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
-->