Escolar Documentos
Profissional Documentos
Cultura Documentos
else
(PHP 4, PHP 5, PHP 7)
elseif/else if
(PHP 4, PHP 5, PHP 7)
elseif, como su nombre lo sugiere, es una combinacin de if y else.
Del mismo modo que else, extiende una sentencia if para ejecutar
una sentencia diferente en caso que la expresin if original se evale
como FALSE. Sin embargo, a diferencia de else, esa expresin
alternativa slo se ejecutar si la expresin condicional del elseif se
evala como TRUE. Por ejemplo, el siguiente cdigo debe mostrar a
es mayor que b, a es igual que b o a es menor que b:
<?php
if ($a > $b) {
echo "a es mayor que b";
} elseif ($a == $b) {
echo "a es igual que b";
} else {
echo "a es menor que b";
}
?>
Puede haber varios elseif dentro de la misma sentencia if. La primera
expresin elseif (si hay alguna) que se evale como TRUE sera
ejecutada. En PHP tambin se puede escribir 'else if' (en dos palabras)
y el comportamiento sera idntico al de 'elseif' (en una sola palabra).
El significado sintctico es ligeramente diferente (si se est
familiarizado con C, este es el mismo comportamiento) pero la
Los bucles do-while son muy similares a los bucles while, excepto que
la expresin verdadera es verificada al final de cada iteracin en lugar
que al principio. La diferencia principal con los bucles while es que
est garantizado que corra la primera iteracin de un bucle do-while
(la expresin verdadera slo es verificada al final de la iteracin),
mientras que no necesariamente va a correr con un bucle while
regular (la expresin verdadera es verificada al principio de cada
iteracin, si se evala como FALSE justo desde el comienzo, la
ejecucin del bucle terminara inmediatamente).
Hay una sola sintaxis para bucles do-while:
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
El bucle de arriba se ejecutara exactamente una sola vez, ya que
despus de la primera iteracin, cuando la expresin verdadera es
verificada, se evala como FALSE ($i no es mayor que 0) y termina la
ejecucin del bucle.
Los usuarios avanzados de C pueden estar familiarizados con un uso
distinto del bucle do-while, para permitir parar la ejecucin en medio
de los bloques de cdigo, mediante el encapsulado con do-while (0), y
utilizando la sentencia break. El siguiente fragmento de cdigo
demuestra esto:
<?php
do {
if ($i < 5) {
echo "i no es lo suficientemente grande";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
echo "i est bien";
/* procesar i */
} while (0);
?>
No se preocupe si no se entiende esto completamente o en absoluto.
Se pueden codificar scripts e incluso scripts potentes sin usar esta
'caracterstica'. Desde PHP 5.3.0, es posible utilizar el operador goto
en lugar de este hack.
for
(PHP 4, PHP 5, PHP 7)
Los bucles for son los ms complejos en PHP. Se comportan como sus
homlogos en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3)
sentencia
La primera expresin (expr1) es evaluada (ejecutada) una vez
incondicionalmente al comienzo del bucle.
En el comienzo de cada iteracin, se evala expr2. Si se evala como
TRUE, el bucle contina y se ejecutan la/sy sentencia/s anidada/s. Si
se evala como FALSE, finaliza la ejecucin del bucle.
Al final de cada iteracin, se evala (ejecuta) expr3.
Cada una de las expresiones puede estar vaca o contener mltiples
expresiones separadas por comas. En expr2, todas las expresiones
separadas por una coma son evaluadas, pero el resultado se toma de
la ltima parte. Que expr2 est vaca significa que el bucle debera
ser corrido indefinidamente (PHP implcitamente lo considera como
TRUE, como en C). Esto puede no ser tan intil como se pudiera
pensar, ya que muchas veces se debe terminar el bucle usando una
sentencia condicional break en lugar de utilizar la expresin
verdadera del for.
Considere los siguientes ejemplos. Todos ellos muestran los nmeros
del 1 al 10:
<?php
/* ejemplo 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* ejemplo 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* ejemplo 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* ejemplo 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Por supuesto, el primer ejemplo parece ser el mejor (o quizs el
cuarto), pero se puede observar que la posibilidad de usar
expresiones vacas en los bucles for resulta til en muchas ocasiones.
PHP tambin admite la sintaxis alternativa de los dos puntos para
bucles for.
for (expr1; expr2; expr3):
sentencia
...
endfor;
Es una cosa comn a muchos usuarios iterar por medio de arrays
como en el siguiente ejemplo.
<?php
/*
* Este es un array con algunos datos que se quieren modificar
* cuando se recorra el bucle for.
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
El cdigo anterior puede ser lento, debido a que el tamao del array
se capta en cada iteracin. Dado que el tamao nunca cambia, el
bucle puede ser fcilmente optimizado mediante el uso de una
variable intermedia para almacenar el tamao en lugar de llamar
repetidamente a count():
<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = count($people); $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
foreach
(PHP 4, PHP 5, PHP 7)
El constructor foreach proporciona un modo sencillo de iterar sobre
arrays. foreach funciona slo sobre arrays y objetos, y emitir un error
al intentar usarlo con una variable de un tipo diferente de datos o una
variable no inicializada. Existen dos sintaxis:
foreach (expresin_array as $valor)
sentencias
foreach (expresin_array as $clave => $valor)
sentencias
La primera forma recorre el array dado por expresin_array. En cada
iteracin, el valor del elemento actual se asigna a $valor y el puntero
interno del array avanza una posicin (as en la prxima iteracin se
estar observando el siguiente elemento).
La segunda forma adems asigna la clave del elemento actual a la
variable $clave en cada iteracin.
Tambin es posible personalizar la iteracin de objetos.
Nota:
En PHP 5, cuando foreach inicia su ejecucin, el puntero interno del
array se pone automticamente en el primer elemento del array. Esto
significa que no es necesario llamar la funcin reset() antes de un
bucle foreach.
salida:
0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>
Antes de PHP 5.5.0, referenciar $valor slo es posible si el array
iterado puede ser referenciado (es decir, si es una variable). El
siguiente cdigo solamente funciona a partir de PHP 5.5.0:
<?php
foreach (array(1, 2, 3, 4) as &$valor) {
$valor = $valor * 2;
}
?>
Nota:
foreach no soporta la capacidad de suprimir mensajes de error
usando '@'.
Se puede haber notado que las siguientes construcciones son
funcionalmente idnticas:
<?php
$array = array("uno", "dos", "tres");
reset($array);
while (list(, $valor) = each($array)) {
echo "Valor: $valor<br />\n";
}
foreach ($array as $valor) {
echo "Valor: $valor<br />\n";
}
?>
Las siguientes construcciones tambin son funcionalmente idnticas:
<?php
$array = array("uno", "dos", "tres");
reset($array);
while (list($clave, $valor) = each($array)) {
echo "Clave: $clave; Valor: $valor<br />\n";
}
foreach ($array as $clave => $valor) {
echo "Clave: $clave; Valor: $valor<br />\n";
}
?>
Algunos ejemplos ms para demostrar su uso:
<?php
/* Ejemplo 1 de foreach: slo el valor */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Valor actual de \$a: $v.\n";
}
/* Ejemplo 2 de foreach: valor (con su notacin de acceso manual imp
reso con fines ilustrativos) */
$a = array(1, 2, 3, 17);
$i = 0; /* slo para efectos ilustrativos */
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* Ejemplo 3 de foreach: clave y valor */
$a = array(
"uno" => 1,
"dos" => 2,
"tres" => 3,
"diecisiete" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* Ejemplo 4 de foreach: arrays multidimensionales */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
}
?>
El resultado del ejemplo sera:
1
3
Se generar un notice si no hay suficientes elementos en el array
para completar el list():
<?php
$array = [
[1, 2],
[3, 4],
];
foreach ($array as list($a, $b, $c)) {
echo "A: $a; B: $b; C: $c\n";
}
?>
El resultado del ejemplo sera:
Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:
Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C:
Historial de cambios
Versi
Descripcin
n
7.0.0
5.5.0
5.5.0
Break
(PHP 4, PHP 5, PHP 7)
break finaliza la ejecucin de la estructura for, foreach, while, dowhile o switch en curso.
break acepta un argumento numrico opcional que indica de cuntas
estructuras anidadas circundantes se debe salir. El valor
predeterminado es 1, es decir, solamente se sale de la estructura
circundante inmediata.
<?php
$arr = array('uno', 'dos', 'tres', 'cuatro', 'pare', 'cinco');
while (list(, $val) = each($arr)) {
if ($val == 'pare') {
break; /* Se puede tambin escribir 'break 1;' aqu. */
}
echo "$val<br />\n";
}
/* Utilizar el argumento opcional. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "En 5<br />\n";
break 1; /* Slo sale del switch. */
case 10:
echo "En 10; saliendo<br />\n";
break 2; /* Sale del switch y del while. */
default:
break;
}
}
?>
Registro de cambios para break
Versi
Descripcin
n
break 0; ya no es vlido. En versiones anteriores se
5.4.0
interpretaba igual que break 1;.
Eliminada la posibilidad de pasar variables (por ejemplo,
5.4.0
$num = 2; break $num;) como argumento numrico.
continue
(PHP 4, PHP 5, PHP 7)
continue se utiliza dentro de las estructuras iterativas para saltar el
resto de la iteracin actual del bucle y continuar la ejecucin en la
1
3
4
pero, en versiones de PHP anteriores a la 5.4.0, la salida de este script
ser:
2
debido a que continue print "$i\n"; se evala completo como una sola
expresin, y as print se llama solamente cuando $i == 2 es
verdadero. (El valor de retorno de print es pasado a continue como el
argumento numrico.)
Nota:
A partir de PHP 5.4.0, el ejemplo anterior emitir un error
E_COMPILE_ERROR.
Registro de cambios para continue
Versi
Descripcin
n
continue 0; ya no es vlido. En versiones anteriores era
5.4.0
interpretado de la misma manera que continue 1;.
Se elimin la posibilidad de pasar variables (por ejemplo,
5.4.0
$num = 2; continue $num;) como el argumento numrico.
switch
(PHP 4, PHP 5, PHP 7)
La sentencia switch es similar a una serie de sentencias IF en la
misma expresin. En muchas ocasiones, es posible que se quiera
comparar la misma variable (o expresin) con muchos valores
diferentes, y ejecutar una parte de cdigo distinta dependiendo de a
que valor es igual. Para esto es exactamente la expresin switch.
Nota: Cabe sealar que a diferencia de algunos otros lenguajes, la
sentencia continue se aplica a switch y acta de manera similar a
break. Si se tiene un switch dentro de un bucle y se desea continuar a
la siguiente iteracin de del ciclo exterior, se utiliza continue 2.
Nota:
Tener en cuenta que switch/case hace comparaciones flexibles.
Historial de cambios
Versi
Descripcin
n
Mltiples casos predeterminados (default) emitirn un error de
7.0.0
tipo E_COMPILE_ERROR.
Los dos ejemplos siguientes son dos formas diferentes de escribir lo
mismo, uno con una serie de sentencias if y elseif, y el otro usando la
sentencia switch:
Ejemplo #1 Estructura switch
<?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;
}
?>
Ejemplo #2 Estrutura switch permite el uso de strings
<?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;
}
?>
}
?>
Un caso especial es el default. Este caso coincide con cualquier cosa
que no se haya correspondido por los otros casos. Por ejemplo:
<?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";
}
?>
La sintaxis alternativa para las estructuras de control es compatible
con los switch. Para obtener ms informacin, consulte Sintaxis
alternativa de estructuras de control.
<?php
switch ($i):
case 0:
echo "i
break;
case 1:
echo "i
break;
case 2:
echo "i
break;
default:
echo "i
endswitch;
?>
es igual a 0";
es igual a 1";
es igual a 2";
no es igual a 0, 1 ni 2";
case 'heineken';
echo 'Buena eleccin';
break;
default;
echo 'Por favor haga una nueva seleccin...';
break;
}
?>
declare
(PHP 4, PHP 5, PHP 7)
El constructor declare es usado para fijar directivas de ejecucin para
un bloque de cdigo. La sintaxis de declare es similar a la sintaxis de
otros constructores de control de flujo:
declare (directive)
statement
La seccin directive permite que el comportamiento de declare sea
configurado. Actualmente, solamente estn reconocidas tres
directivas: ticks (vase abajo para ms informacin sobre la directiva
ticks), encoding (vase abajo para ms informacin sobre la directiva
encoding) y strict_types (para ms infomacin, vase la seccin strict
de la pgina de Argumentos de funciones)
Versin
Descripcin
5.3.0
7.0.0
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Ejemplo #2 Ejemplo de uso de ticks
<?php
function tick_handler()
{
echo "tick_handler() llamado\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
Vase tambin register_tick_function() y unregister_tick_function().
Encoding
Una codificacin de script puede ser especificada para cada script
usando la directiva encoding.
Ejemplo #3 Declarando un encoding para el script
<?php
declare(encoding='ISO-8859-1');
// cdigo aqu
?>
Precaucin
return
(PHP 4, PHP 5, PHP 7)
return devuelve el control del programa al mdulo que lo invoca. La
ejecucin vuelve a la siguiente expresin despus del mdulo que lo
invoca.
Si se llama desde una funcin, la sentencia return inmediatamente
termina la ejecucin de la funcin actual, y devuelve su argumento
como el valor de la llamada a la funcin. return tambin termina la
ejecucin de una sentencia eval() o un archivo de script.
Si se llama desde el mbito global, entonces la ejecucin del script
actual se termina. Si el archivo script actual fue incluido o requerido
con include o require, entonces el control es pasado de regreso al
archivo que hizo el llamado. Adems, si el archivo script actual fue
incluido con include, entonces el valor dado a return ser retornado
como el valor de la llamada include. Si return es llamado desde
dentro del fichero del script principal, entonces termina la ejecucin
del script. Si el archivo script actual fue nombrado por las opciones de
configuracin auto_prepend_file o auto_append_file en php.ini,
entonces se termina la ejecucin de ese archivo script.
Para ms informacin, ver Retornando valores.
Nota: Cabe sealar que dado que return es un constructor del
lenguaje y no una funcin, los parntesis que rodean su argumentos
no son necesarios. Es comn no utilizarlos, y en realidad se debera
hacer as a fin de que PHP tenga menos trabajo que hacer en este
caso.
Nota: Si no se suministra un parmetro, entonces el parntesis debe
omitirse y NULL ser retornado. Llamadas a return con parntesis
pero sin argumentos resultarn en un error del intrprete.
Nota: Nunca se deben usar parntesis al rededor de la variable de
retorno cuando se retorna por referencia, ya que esto no funcionar.
Slo se pueden retornar variables por referencia, no el resultado de
una sentencia. Si se utiliza return ($a); entonces no se est
retornando una variable, sino el resultado de la expresin ($a) (el cual
es, por supuesto, el valor de $a).
require
(PHP 4, PHP 5, PHP 7)
require es idntico a include excepto que en caso de fallo producir
un error fatal de nivel E_COMPILE_ERROR. En otras palabras, ste
detiene el script mientras que include slo emitir una advertencia
(E_WARNING) lo cual permite continuar el script.
Vase la documentacin de include para ms informacin.
include
(PHP 4, PHP 5, PHP 7)
La sentencia include incluye y evala el archivo especificado.
La siguiente documentacin tambin se aplica a require.
Los archivos son incluidos con base en la ruta de acceso dada o, si
ninguna es dada, el include_path especificado. Si el archivo no se
encuentra en el include_path, include finalmente verificar en el
propio directorio del script que hace el llamado y en el directorio de
trabajo actual, antes de fallar. El constructor include emitir una
advertencia si no puede encontrar un archivo, ste es un
comportamiento diferente al de require, el cual emitir un error fatal..
<?php
function foo()
{
global $color;
include 'vars.php';
echo "Una $fruta $color";
}
/* vars.php est en el mbito de foo() as que *
* $fruta NO est disponible por fuera de ste *
* mbito. $color s est porque fue declarado *
* como global.
*/
foo();
// Una manzana verde
echo "Una $fruta $color"; // Una verde
?>
Cuando un archivo es incluido, el intrprete abandona el modo PHP e
ingresa al modo HTML al comienzo del archivo objetivo y se reanuda
de nuevo al final. Por esta razn, cualquier cdigo al interior del
archivo objetivo que deba ser ejecutado como cdigo PHP, tendr que
ser encerrado dentro de etiquetas vlidas de comienzo y terminacin
de PHP.
Si las "envolturas URL include" estn activadas en PHP, se puede
especificar el archivo a ser incluido usando una URL (va HTTP u otra
envoltura soportada - ver Protocolos y Envolturas soportados para
una lista de protocolos) en lugar de una ruta de acceso local. Si el
servidor objetivo interpreta el archivo objetivo como cdigo PHP, las
variables se pueden pasar al archivo incluido usando una string de
peticin como la usada con HTTP GET. Esto no es, en estricto rigor, lo
mismo que haber incluido el archivo y que haya heredado el mbito
de variables del archivo padre; el script realmente est siendo
ejecutado en el servidor remoto y el resultado entonces se incluye
dentro del script local.
Ejemplo #3 include por medio de HTTP
<?php
/* Este ejemplo asume que www.example.com est configurado para i
nterpretar archivos
* .php y no archivos .txt. Adems, aqu 'Funciona' quiere decir que las
variables
* $foo y $bar estn disponibles dentro del archivo incluido. */
// No funciona; file.txt no puede ser manejado por www.example.com
como PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';
// No funciona; busca por un archivo llamado 'file.php?foo=1&bar=2'
en el
// sistema de archivos local.
include 'file.php?foo=1&bar=2';
// Si funciona.
include 'http://www.example.com/file.php?foo=1&bar=2';
$foo = 1;
$bar = 2;
include 'file.txt'; // Funciona.
include 'file.php'; // Funciona.
?>
Advertencia
Advertencia de seguridad
El archivo remoto puede ser procesado en el servidor remoto
(dependiendo de la extensin del archivo y del hecho de si el servidor
remoto corre PHP o no) pero aun as tiene que producir un script PHP
vlido, porque ser procesado en el servidor local. Si el archivo desde
el servidor remoto debe ser procesado all y entregar la salida
solamente, readfile() es la mejor funcin para usar. De lo contrario,
debe tenerse especial cuidado para asegurar que el script remoto
produce un cdigo vlido y deseado.
Ver tambin Archivos remotos, fopen() y file() para informacin
relacionada.
Manejando retornos: include devuelve FALSE en caso de falla y eleva
una advertencia. Inclusiones exitosas, a menos que sea reemplazado
por el archivo incluido, devolver 1. Es posible ejecutar una sentencia
return dentro de un archivo incluido con el fin de terminar el
procesamiento en ese archivo y volver a script que lo llam. Adems,
es posible retornar valores desde los archivos incluidos. Se puede
tomar el valor de la llamada "include" de la misma forma como se
hara con una funcin normal. Esto no es, sin embargo, posible si se
incluyen archivos remotos, a menos que la salida del archivo remoto
tenga unas etiquetas vlidas de inicio y terminacin de PHP (igual que
include_once
(PHP 4, PHP 5, PHP 7)
La sentencia include_once incluye y evala el fichero especificado
durante la ejecucin del script. Tiene un comportamiento similar al de
la sentencia include, siendo la nica diferencia de que si el cdigo del
fichero ya ha sido incluido, no se volver a incluir, e include_once
devolver TRUE. Como su nombre indica, el fichero ser incluido
solamente una vez.
include_once se puede utilizar en casos donde el mismo fichero
podra ser incluido y evaluado ms de una vez durante una ejecucin
particular de un script, as que en este caso, puede ser de ayuda para
evitar problemas como la redefinicin de funciones, reasignacin de
valores de variables, etc.
Vase la documentacin de include para ms informacin sobre cmo
funciona esta funcin.
Nota:
Con PHP 4, la funcionalidad de _once difiere entre sistemas operativos
que ignoran las maysculas/minsculas (como Windows). Por
ejemplo:
Ejemplo #1 include_once con un
maysculas de minsculas en PHP 4
SO
que
no
distinque
<?php
include_once "a.php"; // esto incluir a.php
include_once "A.php"; // esto incluir a.php otra vez! (slo PHP 4)
?>
Este comportamiento cambi en PHP 5, as que, por ejemplo con
Windows primero se normaliza la ruta para que C:\PROGRA~1\A.php
sea identificado con C:\Program Files\a.php y el fichero sea incluido
slo una vez.
goto
(PHP 5 >= 5.3.0, PHP 7)
echo 'Bar';
?>
El resultado del ejemplo sera:
Bar
Ejemplo #2 Ejemplo de goto en un bucle
<?php
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}
}
echo "i = $i";
end:
echo 'j alcanz 17';
?>
El resultado del ejemplo sera:
j alcanz 17
Ejemplo #3 Esto no funcionar
<?php
goto loop;
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
loop:
}
}
echo "$i = $i";
?>
El resultado del ejemplo sera:
Fatal error: 'goto' into loop or switch statement is disallowed in script
on line 2
(Error fatal: 'goto' hacia el interior de un bucle o sentencia switch no
esta permitido en el script en la lnea 2)
Nota:
El operador goto est disponible a partir de PHP 5.3.