PHP se escribe dentro de la
propia página web, junto con el código HTML y, como para cualquier otro tipo de
lenguaje incluido en un código HTML, en PHP necesitamos especificar cuáles son
las partes constitutivas del código escritas en este lenguaje. Esto se hace,
como en otros casos, delimitando nuestro código por etiquetas. Podemos utilizar
distintos modelos de etiquetas en función de nuestras preferencias y
costumbres. Hay que tener sin embargo en cuenta que no necesariamente todas
están configuradas inicialmente y que otras, como es el caso de <% y %>
sólo están disponibles a partir de una determinada versión (3.0.4.).
Estos modos de abrir y cerrar las etiquetas son:
<? y ?>
<% y %>
<?php y ?>
<script language="php">
Este ultimo modo está principalmente aconsejado a aquellos que tengan el
valor de trabajar con Front Page ya que, usando cualquier otro tipo de
etiqueta, corremos el riesgo de que la aplicación nos la borre sin más debido a
que se trata de un código incomprensible para ella.
El modo de funcionamiento de una página PHP, a grandes rasgos, no
difiere del clásico para una página dinámica de lado servidor: El servidor va a
reconocer la extensión correspondiente a la página PHP (phtml, php, php4,...) y
antes de enviarla al navegador va a encargarse de interpretar y ejecutar todo
aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP.
El resto, lo enviara sin más ya que, asumirá que se trata de código HTML
absolutamente comprensible por el navegador.
Otra característica general de los scripts en PHP es la forma de separar
las distintas instrucciones. Para hacerlo, hay que acabar cada instrucción con
un punto y coma ";". Para la última expresión, la que va antes del
cierre de etiqueta, este formalismo no es necesario.
Incluimos también en este capítulo la sintaxis de comentarios. Un
comentario, para aquellos que no lo sepan, es una frase o palabra que nosotros
incluimos en el código para comprenderlo más fácilmente al volverlo a leer un
tiempo después y que, por supuesto, el ordenador tiene que ignorar ya que no va
dirigido a él sino a nosotros mismos. Los comentarios tienen una gran utilidad
ya que es muy fácil olvidarse del funcionamiento de un script programado un
tiempo atrás y resulta muy útil si queremos hacer rápidamente comprensible
nuestro código a otra persona.
Pues bien, la forma de incluir estos comentarios es variable dependiendo
si queremos escribir una línea o más. Veamos esto con un primer ejemplo de
script:
<?
$mensaje="Tengo
hambre!!"; //Comentario de una linea
echo
$mensaje; #Este comentario también es de una linea
/*En este
caso
mi
comentario ocupa
varias
lineas, lo ves? */
?>
Ejecutar script
Si usamos doble barra (//) o el símbolo # podemos introducir comentarios
de una línea. Mediante /* y */ creamos comentarios multilínea. Por supuesto,
nada nos impide de usar estos últimos en una sola línea.
Recordamos que todo el texto insertado en forma de comentario es
completamente ignorado por el servidor. Resulta importante acostumbrarse a
dejar comentarios, es algo que se agradece con el tiempo.
Variables
en php
Las variables son uno de los primeros temas
que tenemos que conocer en PHP y en la mayoría de los lenguajes de
programación. Así que a continuación vamos a tratar este tema dentro del Manual
de PHP, explicando los tipos de variables que podremos encontrar.
Dependiendo de la
información que contenga, una variable puede ser considerada de uno u otro
tipo:
Variables numéricas
Almacenan cifras
|
Enteros
|
$entero=2002;
|
Numeros sin decimales
|
Real
|
$real=3.14159;
|
Numeros con o sin decimal
|
Variables alfanuméricas
Almacenan textos compuestos de números y/o cifras
|
Cadenas
|
Almacenan variables alfanuméricas
|
$cadena="Hola amigo";
|
Tablas
Almacenan series de informaciones numéricas y/o alfanuméricas
|
Arrays
|
Son las variables que guardan las tablas
|
$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gusto";
$sentido[5]="oler";
|
Objetos
Se trata de conjuntos de variables y funciones asociadas. Presentan una
complejidad mayor que las variables vistas hasta ahora pero su utilidad es
más que interesante.
|
A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la
hora de operar con variables. En efecto, cuando definimos una variable
asignándole un valor, el ordenador le atribuye un tipo. Si por ejemplo
definimos una variable entre comillas, la variable será considerada de tipo
cadena:
$variable="5"; //esto es una cadena
Sin embargo si pedimos en nuestro script realizar una operación
matemática con esta variable, no obtendremos un mensaje de error sino que la
variable cadena será asimilada a numérica:
<?
$cadena="5";
//esto es una cadena
$entero=3; //esto
es un entero
echo
$cadena+$entero
?>
Ejecutar script
Este script dará como resultado "8". La variable cadena ha
sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar
la operación matemática. Del mismo modo, podemos operar entre variables tipo
entero y real. No debemos preocuparnos de nada, PHP se encarga durante la
ejecución de interpretar el tipo de variable necesario para el buen
funcionamiento del programa.
Sin embargo, en contraste, hay que tener cuidado en no cambiar
mayúsculas por minúsculas ya que, en este sentido, PHP es sensible. Conviene
por lo tanto trabajar ya sea siempre en mayúsculas o siempre en minúsculas para
evitar este tipo de malentendidos a veces muy difíciles de localizar.
Variables asignadas por referencia
En PHP también podemos asignar variables por referencia. En ese caso no
se les asigna un valor, sino otra variable, de tal modo que las dos variables
comparten espacio en memoria para el mismo dato.
La notación para asignar por referencia es colocar un "&"
antes del nombre de la variable.
<?php
$foo = 'Bob'; //
Asigna el valor 'Bob' a $foo
$bar = &$foo;
// Referencia $foo vía $bar.
$bar = "Mi
nombre es $bar"; // Modifica $bar...
echo $foo; // $foo
también se modifica.
echo $bar;
?>
Esto dará como resultado la visualización dos veces del string "Mi
nombre es Bob". Algo como:
Mi nombre es BobMi nombre es Bob
Cambio
del tipo de las variables en php
Formas en que una variable de PHP puede ver variado su tipo.
PHP no requiere que indiquemos el tipo que va a contener una variable,
sino que lo deduce del valor que asignemos a la variable. Asimismo, se encarga
de actualizar automáticamente el tipo de la variable cada vez que le asignamos
un nuevo valor.
Por ello, para cambiar el tipo de una variable simplemente le asignamos
un valor con un nuevo tipo.
Nota: Se excluyen en este caso el cambio de variables a tipo Array
porque la sintaxis puede resultar ambigua al expresar ese código, es decir,
puede darse el caso de que una línea de código pueda significar dos cosas.
$a = "1";
//$a es una cadena
$a[0] = "f";
//¿Estamos editando el índice de la cadena o forzando a array?
Forzado
En cualquier caso, podemos forzar una variable para que cambie de tipo
con la función setType().
setType($variable,"nuevo_tipo");
la función setType() actualiza el tipo de $variable a
"nuevo_tipo" y devuelve un boleano indicando si hubo éxito o no en la
conversión.
Entre "nuevo_tipo" tenemos:
· "integer"
· "double"
· "string"
· "array"
· "object"
También podemos hacer que una variable se comporte como un tipo
determinado forzándola, de la misma manera a como se hace en el lenguaje C.
$variable =
"23";
$variable = (int)
$variable;
Los forzados permitidos son:
· (int), (integer) - fuerza a entero
(integer)
· (real), (double), (float) - fuerza a
doble (double)
· (string) - fuerza a cadena (string)
· (array) - fuerza a array (array)
(object) - fuerza
a objeto (object)
Variables
de sistema en php
Qué son y para qué sirven
estas variables del servidor. Comentamos algunas de las más útiles.
Dada su naturaleza de lenguaje de lado servidor, PHP es capaz de darnos
acceso a toda una serie de variables que nos informan sobre nuestro servidor y
sobre el cliente. La información de estas variables es atribuida por el
servidor y en ningún caso nos es posible modificar sus valores directamente
mediante el script. Para hacerlo es necesario influir directamente sobre la
propiedad que definen.
Existen multitud de variables de este tipo, algunas sin utilidad
aparente y otras realmente interesantes y con una aplicación directa para
nuestro sitio web. Aquí os enumeramos algunas de estas variables y la
información que nos aportan:
Variable
|
Descripción
|
$HTTP_USER_AGENT
|
Nos informa principalmente sobre el sistema operativo y tipo y versión
de navegador utilizado por el internauta. Su principal utilidad radica en
que, a partir de esta información, podemos redireccionar nuestros usuarios
hacia páginas optimizadas para su navegador o realizar cualquier otro tipo de
acción en el contexto de un navegador determinado.
|
$HTTP_ACCEPT_LANGUAGE
|
Nos devuelve la o las abreviaciones de la lengua considerada como
principal por el navegador. Esta lengua o lenguas principales pueden ser
elegidas en el menú de opciones del navegador. Esta variable resulta también
extremadamente útil para enviar al internauta a las páginas escritas en su
lengua, si es que existen.
|
$HTTP_REFERER
|
Nos indica la URL desde la cual el internauta ha tenido acceso a la
página. Muy interesante para generar botones de "Atrás" dinámicos o
para crear nuestros propios sistemas de estadísticas de visitas.
|
$PHP_SELF
|
Nos devuelve una cadena con la URL del script que está siendo
ejecutado. Muy interesante para crear botones para recargar la página.
|
$HTTP_GET_VARS
|
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por URL o por formularios GET
|
$HTTP_POST_VARS
|
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por medio de un formulario POST
|
$HTTP_COOKIE_VARS
|
Se trata de un array que almacena los nombres y contenidos de las
cookies. Veremos qué son más adelante.
|
$PHP_AUTH_USER
|
Almacena la variable usuario cuando se efectúa la entrada a páginas de
acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para controlar
el acceso a las páginas internas del sitio.
|
$PHP_AUTH_PW
|
Almacena la variable password cuando se efectúa la entrada a páginas
de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para
controlar el acceso a las páginas internas del sitio.
|
$REMOTE_ADDR
|
Muestra la dirección IP del visitante.
|
$DOCUMENT_ROOT
|
Nos devuelve el path físico en el que se encuentra alojada la página
en el servidor.
|
$PHPSESSID
|
Guarda el identificador de sesión del usuario. Veremos más adelante en
qué consisten las sesiones.
|
No todas estas variables están disponibles en la totalidad de servidores
o en determinadas versiones de un mismo servidor. Además, algunas de ellas han
de ser previamente activadas o definidas por medio de algún acontecimiento.
Así, por ejemplo, la variable $HTTP_REFERER no estará definida a menos que el
internauta acceda al script a partir de un enlace desde otra página.
Variables superglobales
A partir de PHP 4.1.0, se dispone de un conjunto de variables de tipo
array que mantienen información del sistema, llamadas superglobales porque se
definen automáticamente en un ámbito global.
Estas variables hacen referencia a las mismas que se accedían antes por
medio de los arrays del tipo $HTTP_*_VARS. Éstas todavía existen, aunque a
partir de PHP 5.0.0 se pueden desactivar con la directiva register_long_arrays.
La lista de estas variables, extraída directamente de la documentación
de PHP es la siguiente:
$GLOBALS
Contiene una referencia a cada variable disponible en el espectro de las
variables del script. Las llaves de esta matriz son los nombres de las
variables globales. $GLOBALS existe dese PHP 3.
$_SERVER
Variables definidas por el servidor web ó directamente relacionadas con
el entorno en don el script se esta ejecutando. Análoga a la antigua matriz
$HTTP_SERVER_VARS (la cual está todavía disponible, aunque no se use).
$_GET
Variables proporcionadas al script por medio de HTTP GET. Análoga a la
antigua matriz $HTTP_GET_VARS (la cual está todavía disponible, aunque no se
use).
$_POST
Variables proporcionadas al script por medio de HTTP POST. Análoga a la
antigua matriz $HTTP_POST_VARS (la cual está todavía disponible, aunque no se
use).
$_COOKIE
Variables proporcionadas al script por medio de HTTP cookies. Análoga a
la antigua matriz $HTTP_COOKIE_VARS (la cual está todavía disponible, aunque no
se use).
$_FILES
Variables proporcionadas al script por medio de la subida de ficheros
via HTTP . Análoga a la antigua matriz $HTTP_POST_FILES (la cual está todavía
disponible, aunque no se use). Vea también Subiendo ficheros por método POST
para más información.
$_ENV
Variables proporcionadas al script por medio del entorno. Análoga a la
antigua matriz $HTTP_ENV_VARS (la cual está todavía disponible, aunque no se
use).
$_REQUEST
Variables proporcionadas al script por medio de cualquier mecanismo de
entrada del usuario y por lo tanto no se puede confiar en ellas. La presencia y
el orden en que aparecen las variables en esta matriz es definido por la
directiva de configuración variables_order. Esta matriz no tiene un análogo en
versiones anteriores a PHP 4.1.0. Vea también import_request_variables().
$_SESSION
Variables registradas en la sesión del script. Análoga a la antigua
matriz $HTTP_SESSION_VARS (la cual está todavía disponible, aunque no se use).
Vea también la sección Funciones para el manejo de sessiones para más
información.
Ámbito
de las variables en PHP
Explicamos con detalle el ámbito de existencia de una variable en PHP y
distinguimos entre variables globales y locales.
En cualquier lenguaje de programación las variables tienen un ámbito,
que es el lugar o lugares donde tienen validez. El ámbito varía en función de
donde se hayan creado esas variables, pudiendo ser globales o locales.
En PHP, todas las variables creadas en la página, fuera de funciones,
son variables globales a la página. Por su parte, las variables creadas dentro
de una función son variables locales a esa función.
Las variables globales se pueden acceder en cualquier lugar de la
página, mientras que las variables locales sólo tienen validez dentro de la
función donde han sido creadas. De modo que una variable global la podemos
acceder dentro de cualquier parte del código, mientras que si intentamos
acceder a una variable local fuera de la función donde fue creada, nos
encontraremos con que esa variable no tiene contenido alguno.
Ahora bien, si intentamos acceder a una variable global dentro de una
función, en principio también nos encontraremos con que no se tiene acceso a su
valor. Esto es así en PHP por motivos de claridad del código, para evitar que
se pueda prestar a confusión el hecho de usar dentro de una función una
variable que no ha sido declarada por ningún sitio cercano.
Nota: tal vez resulten desconocidos los conceptos sobre funciones, que
se tratan más adelante en este manual: funciones en PHP
Entonces, si queremos utilizar una variable global a la página dentro de
una función, tenemos que especificar de alguna manera que esa variable que
vamos a utilizar es una global. Existen en PHP un par de maneras de utilizar
variables globales a la página dentro de una función. Son las siguientes:
Matriz GLOBALS
Existe un array en PHP llamado $GLOBALS, que guarda una referencia a
todas las variables creadas de manera global a la página. Es una matriz o array
asociativo, de los que en lugar de índices numéricos utilizan índices de texto,
donde cada índice es el nombre que hemos dado a la variable y cada valor es el
contenido de cada variable.
Supongamos que tenemos esta declaración de variables globales a la
página, es decir, fuera de cualquier función:
$mivariable = "pepe";
$otravariable = 1234;
Si queremos acceder a esas variables dentro de una función utilizando el
array $GLOBALS tendríamos este código:
function mifuncion(){
//estoy dentro de la función, para aceder a las variables utilizo
$GLOBALS
echo $GLOBALS["mivariable"];
echo $GLOBALS["otravariable"];
}
Como se puede ver, se accede al contenido de las variables globales con
el array $GLOBALS, utilizando como índices de la matriz los nombres de variables
que deseamos mostrar.
Esto imprimiría por pantalla el texto "pepe1234", el valor de
las dos variables uno detrás del otro.
Declaración de uso de variables globales dentro de una función
Otra cosa que podemos hacer para acceder a variables globales dentro de
una función es especificar al comienzo de dicha función la lista de variables
que vamos a utilizar dentro. Para especificar esas variables utilizamos la
palabra "global" seguida de la lista de variables que se van a
utilizar del entorno global.
function mifuncion(){
global $mivariable, $otravariable
//con esa línea dentro de la función, declaramos el uso de variables
globales
echo $mivariable;
echo $otravariable;
}
Como vemos, con "global" se especifica que vamos a utilizar
unas variables que fueron declaradas como globales a la página. Una vez hecho
esto, ya podemos acceder a esas variables globales como si estuvieran
declaradas dentro de la función.
Cualquier alteración que hagamos a las variables dentro de la función
permanecerá cuando se haya salido de la función, tanto si accedemos a través
del array $GLOBALS o declarando con "global" el uso de esas
variables.
Arreglos
Nos detenemos para ver cómo
son los arrays en PHP, la estructura de datos más esencial que existe. Además
aprenderemos a trabajar con cadenas en PHP.
Tablas
o Arrays en PHP
Creación de tablas por medio de variables tipo array. Utilidad y
funciones útiles relacionadas.
Un tipo de variable que ya hemos descrito pero puede ser relativamente
complicado a asimilar con respecto a la mayoría son los arrays. Un array es una
variable que está compuesta de varios elementos cada uno de ellos catalogado
dentro de ella misma por medio de una clave.
En los capítulos anteriores poníamos el ejemplo de un array llamado
sentido que contenía los distintos sentidos del ser humano:
$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gustar";
$sentido[5]="oler";
En este caso este array cataloga sus elementos, comúnmente llamados
valores, por números. Los números del 1 al 5 son por lo tanto las claves y los
sentidos son los valores asociados. Nada nos impide emplear nombres (cadenas)
para clasificarlos. Lo único que deberemos hacer es entrecomillarlos:
<?
$moneda["espana"]="Peseta";
$moneda["francia"]="Franco";
$moneda["usa"]="Dolar";
?>
Otra forma de definir idénticamente este mismo array y que nos puede
ayudar para la creación de arrays más complejos es la siguiente sintaxis:
<?
$moneda=array("espana"=>
"Peseta","francia" => "Franco","usa"
=> "Dolar");
?>
Una forma muy practica de almacenar datos es mediante la creación de
arrays multidimensionales (tablas). Pongamos el ejemplo siguiente: Queremos
almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada
país. Para hacerlo podemos emplear un array llamado país que vendrá definido
por estas tres características (claves). Para crearlo, deberíamos escribir una
expresión del mismo tipo que la vista anteriormente en la que meteremos una
array dentro del otro. Este proceso de incluir una instruccion dentro de otra
se llama anidar y es muy corriente en programación:
<?
$pais=array
(
"espana"
=>array
(
"nombre"=>"España",
"lengua"=>"Castellano",
"moneda"=>"Peseta"
),
"francia"
=>array
(
"nombre"=>"Francia",
"lengua"=>"Francés",
"moneda"=>"Franco"
)
);
echo
$pais["espana"]["moneda"] //Saca en pantalla:
"Peseta"
?>
Ejecutar script
Antes de entrar en el detalle de este pequeño script, comentemos algunos
puntos referentes a la sintaxis. Como puede verse, en esta secuencia de script,
no hemos introducido punto y coma ";" al final de cada línea. Esto es
simplemente debido a que lo que hemos escrito puede ser considerado como una
sola instrucción. En realidad, somos nosotros quienes decidimos cortarla en
varias líneas para, así, facilitar su lectura. La verdadera instrucción
acabaría una vez definido completamente el array y es precisamente ahí donde
hemos colocado el único punto y coma. Por otra parte, podéis observar cómo
hemos jugado con el tabulador para separar unas líneas más que otras del
principio. Esto también lo hacemos por cuestiones de claridad, ya que nos
permite ver qué partes del código están incluidas dentro de otras. Es
importante acostumbrarse a escribir de esta forma del mismo modo que a introducir
los comentarios ya que la claridad de los scripts es fundamental a la hora de
depurarlos. Un poco de esfuerzo a la hora de crearlos puede ahorrarnos muchas
horas a la hora de corregirlos o modificarlos meses más tarde.
Pasando ya al comentario del programa, como podéis ver, éste nos permite
almacenar tablas y, a partir de una simple petición, visualizarlas un
determinado valor en pantalla.
Lo que es interesante es que la utilidad de los arrays no acaba aquí,
sino que también podemos utilizar toda una serie de funciones creadas para
ordenarlos por orden alfabético directo o inverso, por claves, contar el numero
de elementos que componen el array además de poder movernos por dentro de él
hacia delante o atrás.
Muchas son las funciones propuestas por PHP para el tratamiento de
arrays, no vamos a entrar aquí en una descripción de las mismas. Sólo
incluiremos esta pequeña tabla que puede ser complementada, si necesario, con
la documentación que ya hemos mencionado.
Función
|
Descripción
|
array_values (mi_array)
|
Lista los valores contenidos en mi_array
|
asort(mi_array) y arsort(mi_array)
|
Ordena por orden alfabético directo o inverso en función de los
valores
|
count(mi_array)
|
Nos da el numero de elementos de nuestro array
|
ksort(mi_array) y krsort(mi_array)
|
Ordena por orden alfabético directo o inverso en función de las claves
|
list ($variable1,
$variable2...)=mi_array
|
Asigna cada una variable a cada uno de los valores del array
|
next(mi_array), prev(mi_array),
reset(mi_array) y end(mi_array)
|
Nos permiten movernos por dentro del array con un puntero hacia
delante, atras y al principio y al final.
|
each(mi_array)
|
Nos da el valor y la clave del elemento en el que nos encontramos y
mueve al puntero al siguiente elemento.
|
De gran utilidad es también el bucle foreach que recorre
de forma secuencial el array de principio a fin.
Trabajo
con tablas o arrays en PHP
Vemos algunas de las funciones típicas del trabajo con arrays a través
de una pequeña explicación y un ejemplo de uso.
Vamos a ver varios ejemplos de trabajo con arrays (arreglos, vectores,
matrices o tablas en castellano) en PHP que ilustrarán un poco el
funcionamiento de algunas de las funciones de arrays más populares que trae
consigo PHP.
Sin más, vamos a introducirnos en materia con varios ejemplos
interesantes de manejo de vectores.
Referencia:Los arrays en PHP se explican en el artículo Tablas o Arrays
en PHP.
Modificar el número de elementos de un array
Ahora vamos a ver varios ejemplos mediante los cuales nuestros arrays
pueden aumentar o reducir el número de casillas disponibles.
Reducir el tamaño de un array
array_slice()
Para disminuir el número de casillas de un arreglo tenemos varias
funciones. Entre ellas, array_slice() la utilizamos cuando queremos recortar
algunas casillas del arreglo, sabiendo los índices de las casillas que deseamos
conservar.
Recibe tres parámetros. El array, el índice del primer elemento y el
número de elementos a tomar, siendo este último parámetro opcional.
En el ejemplo siguiente tenemos un array con cuatro nombres propios. En
la primera ejecución de array_slice() estamos indicando que deseamos tomar
todos los elementos desde el índice 0 (el principio) hasta un número total de 3
elementos.
El segundo array_slice() indica que se tomen todos los elementos a
partir del índice 1 (segunda casilla).
<?
$entrada = array ("Miguel", "Pepe",
"Juan", "Julio", "Pablo");
//modifico el tamaño
$salida = array_slice ($entrada, 0, 3);
//muestro el array
foreach ($salida as $actual)
echo $actual . "<br>";
echo "<p>";
//modifico otra vez
$salida = array_slice ($salida, 1);
//muestro el array
foreach ($salida as $actual)
echo $actual . "<br>";
?>
Tendrá como salida:
Miguel
Pepe
Juan
Pepe
Juan
array_shift()
Esta función extrae el el primer elemento del array y lo devuelve.
Además, acorta la longitud del array eliminando el elemento que estaba en la
primera casilla. Siempre hace lo mismo, por tanto, no recibirá más que el array
al que se desea eliminar la primera posición.
En el código siguiente se tiene el mismo vector con nombres propios y se
ejecuta dos veces la función array_shift() eliminando un elemento en cada
ocasión. Se imprimen los valores que devuelve la función y los elementos del
array resultante de eliminar la primera casilla.
<?
$entrada = array
("Miguel", "Pepe", "Juan", "Julio",
"Pablo");
//quito la primera
casilla
$salida =
array_shift ($entrada);
//muestro el array
echo "La
función devuelve: " . $salida . "<br>";
foreach ($entrada
as $actual)
echo
$actual . "<br>";
echo
"<p>";
//quito la primera
casilla, que ahora sería la segunda del array original
$salida =
array_shift ($entrada);
echo "La
función devuelve: " . $salida . "<br>";
//muestro el array
foreach ($entrada
as $actual)
echo
$actual . "<br>";
?>
Da como resultado:
La función devuelve: Miguel
Pepe
Juan
Julio
Pablo
La función devuelve: Pepe
Juan
Julio
Pablo
unset()
Se utiliza para destruir una variable dada. En el caso de los arreglos,
se puede utilizar para eliminar una casilla de un array asociativo (los que no
tienen índices numéricos sino que su índice es una cadena de caracteres).
Veamos el siguiente código para conocer cómo definir un array asociativo
y eliminar luego una de sus casillas.
<?
$estadios_futbol =
array("Barcelona"=> "Nou Camp","Real Madrid"
=> "Santiago Bernabeu","Valencia" =>
"Mestalla","Real Sociedad" => "Anoeta");
//mostramos los
estadios
foreach
($estadios_futbol as $indice=>$actual)
echo
$indice . " -- " . $actual . "<br>";
echo
"<p>";
//eliminamos el
estadio asociado al real madrid
unset
($estadios_futbol["Real Madrid"]);
//mostramos los
estadios otra vez
foreach
($estadios_futbol as $indice=>$actual)
echo $indice .
" -- " . $actual . "<br>";
?>
La salida será la siguiente:
Barcelona -- Nou Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- Anoeta
Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta
Aumentar el tamaño de un array
Tenemos también a nuestra disposición varias funciones que nos pueden
ayudar a aumentar el número de casillas de un arreglo.
array_push()
Inserta al final del array una serie de casillas que se le indiquen por
parámetro. Por tanto, el número de casillas del array aumentará en tantos
elementos como se hayan indicado en el parámetro de la función. Devuelve el
número de casillas del array resultante.
Veamos este código donde se crea un arreglo y se añaden luego tres
nuevos valores.
<?
$tabla = array
("Lagartija", "Araña", "Perro", "Gato",
"Ratón");
//aumentamos el
tamaño del array
array_push($tabla,
"Gorrión", "Paloma", "Oso");
foreach ($tabla as
$actual)
echo
$actual . "<br>";
?>
Da como resultado esta salida:
Lagartija
Araña
Perro
Gato
Ratón
Gorrión
Paloma
Oso
array_merge()
Ahora vamos a ver cómo unir dos arrays utilizando la función
array_merge(). A ésta se le pasan dos o más arrays por parámetro y devuelve un
arreglo con todos los campos de los vectores pasados.
En este código de ejemplo creamos tres arrays y luego los unimos con la
función array_merge()
<?
$tabla = array
("Lagartija", "Araña", "Perro", "Gato",
"Ratón");
$tabla2 = array
("12","34","45","52","12");
$tabla3 = array
("Sauce","Pino","Naranjo","Chopo","Perro","34");
//aumentamos el
tamaño del array
$resultado =
array_merge($tabla, $tabla2, $tabla3);
foreach ($resultado
as $actual)
echo
$actual . "<br>";
?>
Da como resultado:
Lagartija
Araña
Perro
Gato
Ratón
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34
Una última cosa. También pueden introducirse nuevas casillas en un
arreglo por los métodos habituales de asignar las nuevas posiciones en el array
a las casillas que necesitemos.
En arrays normales se haría así:
$tabla = array ("Sauce","Pino","Naranjo");
$tabla[3]="Algarrobo";
En arrays asociativos:
$estadios_futbol = array("Valencia" =>
"Mestalla","Real Sociedad" => "Anoeta");
$estadios_futbol["Barcelona"]= "Nou Camp";
Veremos más adelante otras posibilidades del trabajo con arrays.
Ponemos a vuestra disposición las páginas PHP que contienen los códigos
con los que hemos trabajado.
Estructuras
de control en PHP
Vemos una a una las distintas estructuras de control del flujo de los
programas disponibles en el lenguaje de programación PHP: condicionales y
bucles.
Control
del flujo en PHP: Condiciones IF
Presentamos una de las herramientas principales usadas para controlar el
flujo de nuestros scripts: Los condicionales IF.
La programación exige en muchas ocasiones la repetición de acciones
sucesivas o la elección de una determinada secuencia y no de otra dependiendo
de las condiciones específicas de la ejecución.
Como ejemplo, podríamos hacer alusión a un script que ejecute una
secuencia diferente en función del día de la semana en el que nos encontramos.
Este tipo de acciones pueden ser llevadas a cabo gracias a una paleta de
instrucciones presentes en la mayoría de los lenguajes. En este capítulo
describiremos someramente algunas de ellas propuestas por PHP y que resultan de
evidente utilidad.
Para evitar el complicar el texto, nos limitaremos a introducir las más
importantes dejando de lado otras cuantas que podrán ser fácilmente asimilables
a partir de ejemplos prácticos.
Las condiciones if
Cuando queremos que el programa, llegado a un cierto punto, tome un
camino concreto en determinados casos y otro diferente si las condiciones de
ejecución difieren, nos servimos del conjunto de instrucciones if, else y
elseif. La estructura de base de este tipo de instrucciones es la siguiente:
if (condición)
{
Instrucción 1;
Instrucción 2;
...
}
else
{
Instrucción A;
Instrucción B;
...
}
Llegados a este punto, el programa verificará el cumplimiento o no de la
condición. Si la condición es cierta las instrucciones 1 y 2 serán ejecutadas.
De lo contrario (else), las instrucciones A y B serán llevadas a cabo.
Esta estructura de base puede complicarse un poco más si tenemos cuenta
que no necesariamente todo es blanco o negro y que muchas posibilidades pueden
darse. Es por ello que otras condiciones pueden plantearse dentro de la
condición principal. Hablamos por lo tanto de condiciones anidadas que tendrían
una estructura del siguiente tipo:
if (condición1)
{
Instrucción 1;
Instrucción 2;
...
}
else
{
if (condición2)
{
Instrucción A;
Instrucción B;
...
}
else
{
Instrucción X
...
}
}
De este modo podríamos introducir tantas condiciones como queramos
dentro de una condición principal.
De gran ayuda es la instrucción elseif que permite en una sola línea
introducir una condición adicional. Este tipo de instrucción simpifica
ligeramente la sintaxis que acabamos de ver:
if (condición1)
{
Instrucción 1;
Instrucción 2;
...
}
elseif (condición2)
{
Instrucción A;
Instrucción B;
...
}
else
{
Instrucción X
...
}
El uso de esta herramienta resultará claro con un poco de práctica.
Pongamos un ejemplo sencillo de utilización de condiciones. El siguiente
programa permitiría detectar la lengua empleada por el navegador y visualizar
un mensaje en dicha lengua.
<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
<BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$frances="Bonjour";
//Ahora leemos del navegador cuál es su lengua oficial
$idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);
//Formulamos las posibilidades que se pueden dar
if ($idioma == "es")
{echo "$espanol";}
elseif ($idioma=="fr")
{echo "$frances";}
else
{echo "$ingles";}
?>
</BODY>
</HTML>
Ejecutar script
Para poder ver el funcionamiento de este script es necesario cambiar el
idioma preferido lo cual puede ser realizado a partir del menú de opciones del
navegador.
Para leer la lengua aceptada por el navegador lo que hacemos es definir
una variable ($idioma) y, mediante la función substr, recogemos las dos
primeras letras del código correspondiente al idioma aceptado por el navegador
($HTTP_ACCEPT_LANGUAGE).
La tercera parte de script se encarga de ver si el navegador está en
español (es), francés (fr) o en cualquier otro idioma que no sea ninguno de
estos dos y de imprimir el mensaje que proceda en cada caso.
A notar que, cuando se trata de comparar variables, ponemos un doble
igual "==" en lugar de un simple "=". Este último queda
reservado exclusivamente para asignar valores a variables
Control del flujo en PHP: Bucles I
Estructura y funcionamiento de los bucles while y do/while.
Los ordenadores, como cualquier máquina, están diseñados para realizar
tareas repetitivas. Es por ello que nuestros programas pueden aprovecharse de
este principio para realizar una determinada secuencia de instrucciones un
cierto número de veces. Para ello, utilizamos las estructuras llamadas en bucle
que nos ayudan a, usando unas pocas líneas, realizar una tarea incluida dentro
del bucle un cierto numero de veces definido por nosotros mismos.
PHP propone varios tipos de bucle cada uno con características
especificas:
Bucle while
Sin duda el bucle más utilizado y el más sencillo. Lo usamos para
ejecutar las instrucciones contenidas en su interior siempre y cuando la
condición definida sea verdadera. La estructura sintáctica es la siguiente.
while (condición)
{
instruccion1;
instruccion2;
...
}
Un ejemplo sencillo es este bucle que aumenta el tamaño de la fuente en
una unidad a cada nueva vuelta por el bucle:
<?
$size=1;
While ($size<=6)
{
echo"<font
size=$size>Tamaño $size</font><br>n";
$size++;
}
?>
Ejecutar script
A modo de explicación, diremos que, antes de nada, hemos de definir el
valor de la variable que vamos a evaluar en la condición. Algo absolutamente
obvio pero fácil de olvidar. En este caso le hemos atribuido un valor de 1 que
corresponde a la letra más pequeña.
El paso siguiente es crear el bucle en el que imponemos la condición que
la variable no exceda el valor de 6.
La instrucción a ejecutar será imprimir en nuestro documento un código
HTML en el que la etiqueta font y el mensaje que contiene varían a medida que
$size cambia su valor.
El siguiente paso es incrementar en una unidad el valor de $size. Esto
se puede hacer con una expresión como la mostrada en el bucle ($size++) que en
realidad es sinónima de:
$size=$size+1
Veremos otras de estas abreviaciones más adelante.
Otro ejemplo del buble While
El bucle while se suele utiliza cuando no se sabe exactamente cuantas
iteraciones se deben realizar antes de acabar. Vamos a utilizarlo en otro
ejemplo, en el que hay que recorrer una cadena hasta encontrar un carácter
dado. Si lo encuentra, escribir su posición. Si no, escribir que no se ha
encontrado.
<?
$cadena = "hola a todo el mundo";
//recorro la cadena hasta encontrar una "m"
$i=0;
while ($cadena[$i]!="m" && $i< strlen($cadena)){
$i++;
}
if ($i==strlen($cadena))
echo "No se encuentra...";
else
echo "Está en la posición $i";
?>
En este ejemplo se define una cadena con el valor "hola a todo el
mundo". Posteriormente se recorre esa cadena hasta el final de la cadena o
hasta encontrar el carácter "m", utilizando una variable $i que lleva
la cuenta de los caracteres recorridos.
Al final del bucle while, si se salió porque se encontró el carácter
"m", la variable $i valdrá un número menor que la longitud de la cadena.
Si se salió por llegar al final de la cadena, la variable $i valdrá lo mismo
que la longitud en caracteres de esa cadena. En el condicional simplemente se
comprueba si $i vale o no lo mismo que la longitud de la cadena, mostrando los
mensajes adecuados en cada caso.
Podemos ver el ejemplo en funcionamiento.
Bucle do/while
Este tipo de bucle no difiere en exceso del anterior. La sintaxis es la
siguiente:
do
{
instruccion1;
instruccion2;
...
}
while (condición)
La diferencia con respecto a los bucles while es que este tipo de bucle
evalúa la condición al final con lo que, incluso siendo falsa desde el
principio, éste se ejecuta al menos una vez.
Control
del flujo en PHP: Bucles II
Estructura y funcionamiento de los bucles for y foreach. Explicamos cómo
salir de un bucle: Break y continue.
Este es el segundo artículo sobre los bucles en PHP que publicamos en el
Manual de PHP. El anterior artículo explicó acerca de los bucles while y
do-while. Así pues, ahora vamos a dedicarnos a los otros tipos de bucles, que
son el bucle for, para iterar un número dado de veces, foreach, útil para
recorrer arrays, así como las sentencias break y continue.
Bucle for
PHP está provisto de otros tipos de bucle que también resultan muy
prácticos en determinadas situaciones. El más popular de ellos es el bucle for
que, como para los casos anteriores, se encarga de ejecutar las instrucciones
entre llaves. La diferencia con los anteriores radica en cómo se plantea la
condición de finalización del bucle. Para aclarar su funcionamiento vamos a
expresar el ejemplo de bucle while visto en el capítulo anterior en forma de
bucle for:
<?
For
($size=1;$size<=6;$size++)
{
echo"<font size=$size>Tamaño
$size</font><br>n";
}
?>
Ejecutar script
Las expresiones dentro del paréntesis definen respectivamente:
-Inicialización de la variable. Válida para la primera vuelta del bucle.
-Condición de evaluación a cada vuelta. Si es cierta, el bucle continua.
-Acción a realizar al final de cada vuelta de bucle.
Bucle foreach
Este bucle, implementado en las versiones de PHP4, nos ayuda a recorrer
los valores de un array lo cual puede resultar muy útil por ejemplo para
efectuar una lectura rápida del mismo. Recordamos que un array es una variable
que guarda un conjunto de elementos (valores) catalogados por claves.
La estructura general es la siguiente:
Foreach ($array as
$clave=>$valor)
{
instruccion1;
instruccion2;
…;
}
Un ejemplo práctico es la lectura de un array lo cual podría hacerse del
siguiente modo:
<?
$moneda=array("España"=>
"Peseta","Francia" => "Franco","USA"
=> "Dolar");
Foreach ($moneda
as $clave=>$valor)
{
echo "Pais: $clave Moneda:
$valor<br>";
}
?>
Ejecutar script
Este script se encargaría de mostrarnos por pantalla el contenido del
array $moneda. No resultaría mala idea crear una función propia basada en este
bucle que nos permitiese visualizar arrays monodimensionales y almacenarla en
nuestra librería. Esta función podría ser definida de esta forma:
Function
mostrar_array ($array)
{
Foreach ($array as
$clave=>$valor)
{echo
"$clave=>$valor<br>";}
}
Break y continue
Estas dos instrucciones se introducen dentro de la estructura y nos
sirven respectivamente para escapar del bucle o saltar a la iteración
siguiente. Pueden resultarnos muy prácticas en algunas situaciones.
Durante una iteración de un bucle podemos saltar directamente a la
siguiente iteración, sin seguir con la actual, con la instrucción continue.
También podemos detener completamente las repeticiones de cualquier
bucle con break, lo que parará la ejecución de la iteración actual y de las
siguientes que pudiera haber.
Funciones
en PHP
Las funciones son esenciales para poder realizar código de calidad,
tanto en PHP como en muchos otros lenguajes de programación. En estos capítulos
del Manual de PHP aprenderemos a definir funciones, trabajar con parámetros y
retornar valores.
Utilidad de las funciones, creación y almacenamiento en archivos.
Ejemplo práctico de creación de función.
En nuestro manual de páginas dinámicas vimos el concepto de función. Vimos
que la función podría ser definida como un conjunto de instrucciones que
explotan ciertas variables para realizar una tarea más o menos elemental.
PHP basa su eficacia principalmente en este tipo de elemento. Una gran
librería que crece constantemente, a medida que nuevas versiones van surgiendo,
es complementada con las funciones de propia cosecha dando como resultado un
sinfín de recursos que son aplicados por una simple llamada.
Las funciones integradas en PHP son muy fáciles de utilizar. Tan sólo hemos
de realizar la llamada de la forma apropiada y especificar los parámetros y/o
variables necesarios para que la función realice su tarea.
Lo que puede parecer ligeramente más complicado, pero que resulta sin
lugar a dudas muy práctico, es crear nuestras propias funciones. De una forma
general, podríamos crear nuestras propias funciones para conectarnos a una base
de datos o crear los encabezados o etiquetas meta de un documento HTML. Para
una aplicación de comercio electrónico podríamos crear por ejemplo funciones de
cambio de una moneda a otra o de cálculo de los impuestos a añadir al precio de
articulo. En definitiva, es interesante crear funciones para la mayoría de
acciones más o menos sistemáticas que realizamos en nuestros programas.
Aquí daremos el ejemplo de creación de una función que, llamada al
comienzo de nuestro script, nos crea el encabezado de nuestro documento HTML y
coloca el titulo que queremos a la página:
<?
function
hacer_encabezado($titulo)
{
$encabezado="<html><head>t<title>$titulo</title></head>";
echo $encabezado;
}
?>
Esta función podría ser llamada al principio de todas nuestras páginas
de la siguiente forma:
$titulo="Mi web";
hacer_encabezado($titulo);
De esta forma automatizamos el proceso de creación de nuestro documento.
Podríamos por ejemplo incluir en la función otras variables que nos ayudasen a
construir la etiquetas meta y de esta forma, con un esfuerzo mínimo, crearíamos
los encabezados personalizados para cada una de nuestras páginas. De este mismo
modo nos es posible crear cierres de documento o formatos diversos para
nuestros textos como si se tratase de hojas de estilo que tendrían la ventaja
de ser reconocidas por todos los navegadores.
Por supuesto, la función ha de ser definida dentro del script ya que no
se encuentra integrada en PHP sino que la hemos creado nosotros. Esto en
realidad no pone ninguna pega ya que puede ser incluida desde un archivo en el
que iremos almacenando las definiciones de las funciones que vayamos creando o
recopilando.
Estos archivos en los que se guardan las funciones se llaman librerías.
La forma de incluirlos en nuestro script es a partir de la instrucción require
o include:
require("libreria.php") o include("libreria.php")
En resumen, la cosa quedaría así:
Tendríamos un archivo libreria.php como sigue
<?
//función de
encabezado y colocación del titulo
function
hacer_encabezado($titulo)
{
$encabezado="<html>n<head>nt<title>$titulo</title>n</head>n";
echo $encabezado;
}
?>
Por otra parte tendríamos nuestro script principal página.php (por
ejemplo):
<?
include("libreria.php");
$titulo="Mi
Web";
hacer_encabezado($titulo);
?>
<body>
El cuerpo de la
página
</body>
</html>
Ejecutar script
Podemos meter todas las funciones que vayamos encontrando dentro de un
mismo archivo pero resulta muchísimo más ventajoso ir clasificándolas en
distintos archivos por temática: Funciones de conexión a bases de datos,
funciones comerciales, funciones generales, etc. Esto nos ayudara a poder
localizarlas antes para corregirlas o modificarlas, nos permite también cargar
únicamente el tipo de función que necesitamos para el script sin recargar éste
en exceso además de permitirnos utilizar un determinado tipo de librería para
varios sitios webs distintos.
También puede resultar muy práctico el utilizar una nomenclatura
sistemática a la hora de nombrarlas: Las funciones comerciales podrían ser
llamadas com_loquesea, las de bases de datos bd_loquesea, las de tratamiento de
archivos file_loquesea. Esto nos permitirá reconocerlas enseguida cuando leamos
el script sin tener que recurrir a nuestra oxidada memoria para descubrir su
utilidad.
No obstante, antes de lanzarnos a crear nuestra propia función, merece
la pena echar un vistazo a la documentación para ver si dicha función ya existe
o podemos aprovecharnos de alguna de las existentes para aligerar nuestro
trabajo. Así, por ejemplo, existe una función llamada header que crea un
encabezado HTML configurable lo cual nos evita tener que crearla nosotros mismos.
Como puede verse, la tarea del programador puede en algunos casos
parecerse a la de un coleccionista. Hay que ser paciente y metódico y al final,
a base de trabajo propio, intercambio y tiempo podemos llegar poseer nuestro
pequeño tesoro.
Ejemplo de función
Vamos a ver un ejemplo de creación de funciones en PHP. Se trata de
hacer una función que recibe un texto y lo escribe en la página con cada
carácter separado por "-". Es decir, si recibe "hola" debe
escribir "h-o-l-a" en la página web.
Nota:Para comprender este ejemplo necesitamos conocer el bucle for, que
se explica en el capítulo Control del flujo en PHP: Bucles II.
La manera de realizar esta función será recorrer el string, caracter a
caracter, para imprimir cada uno de los caracteres, seguido de el signo
"-". Recorreremos el string con un bucle for, desde el carater 0 hasta
el número de caracteres total de la cadena.
El número de caracteres de una cadena se obtiene con la función
predefinida en PHP strlen(), que recibe el string entre paréntesis y devuelve
el número de los caracteres que tenga.
<html>
<head>
<title>funcion
1</title>
</head>
<body>
<?
function
escribe_separa($cadena){
for
($i=0;$i<strlen($cadena);$i++){
echo $cadena[$i];
if ($i<strlen($cadena)-1)
echo "-";
}
}
escribe_separa
("hola");
echo
"<p>";
escribe_separa
("Texto más largo, a ver lo que hace");
?>
</body>
</html>
La función que hemos creado se llama escribe_separa y recibe como
parámetro la cadena que hay que escribir con el separador "-". El
bucle for nos sirve para recorrer la cadena, desde el primer al último
carácter. Luego, dentro del bucle, se imprime cada carácter separado del signo
"-". El if que hay dentro del bucle for comprueba que el actual no
sea el último carácter, porque en ese caso no habría que escribir el signo "-"
(queremos conseguir "h-o-l-a" y si no estuviera el if obtendríamos
"h-o-l-a-").
En el código mostrado se hacen un par de llamadas a la función para ver
el resultado obtenido con diferentes cadenas como parámetro. Podemos ver el
script en marcha.
Paso
de parámetros
Este capítulo pretende ser una ampliación de detalles que atañen al
artículo dedicado a las funciones en PHP.
Vamos a explicar algunos detalles adicionales sobre la definición y uso
de funciones, para ampliar el artículo de funciones en php.
Paso de parámetros
Los parámetros son los datos que reciben las funciones y que utilizan
para realizar las operaciones de la función. Una función puede recibir
cualquier número de parámetros, incluso ninguno. A la hora de definir la
función, en la cabecera, se definen los parámetros que va a recibir.
function f1 ($parametro1, $parámetro2)
Así definimos una función llamada f1 que recibe dos parámetros. Como se
puede observar, no se tiene que definir el tipo de datos de cada parámetro.
Los parámetros tienen validez durante la ejecución de la función, es
decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la
función se termina, los parámetros dejan de existir.
Los parámetros se pasan por valor
El paso de parámetros en PHP se realiza por valor. "Por valor"
es una manera típica de pasar parámetros en funciones, quiere decir que el
cambio de un dato de un parámetro no actualiza el dato de la variable que se
pasó a la función. Por ejemplo, cuando invocamos una función pasando una
variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro
de la función, la variable original no se ve afectada por ese cambio. Puede que
se vea mejor con un ejemplo:
function porvalor
($parametro1){
$parametro1="hola";
echo
"<br>" . $parametro1; //imprime "hola"
}
$mivariable =
"esto no cambia";
porvalor
($mivariable);
echo
"<br>" . $mivariable; //imprime "esto no cambia"
Esta página tendrá como resultado:
hola
esto no cambia
Paso de parámetros por referencia
En contraposición al paso de parámetros por valor, está el paso de
parámetros por referencia. En este último caso, el cambio del valor de un
parámetro dentro de una función sí afecta al valor de la variable original.
Podemos pasar los parámetros por referencia si, en la declaración de la
función, colocamos un "&" antes del parámetro.
<?
function
porreferencia(&$cadena)
{
$cadena = 'Si
cambia';
}
$str = 'Esto es
una cadena';
porreferencia
($str);
echo $str; //
Imprime 'Si cambia'
?>
Este script mostrará por pantalla 'Si cambia'.
Parámetros por defecto
Podemos definir valores por defecto para los parámetros. Los valores por
defecto sirven para que los parámetros contengan un dato predefinido, con el
que se inicializarán si no se le pasa ningún valor en la llamada de la función.
Los valores por defecto se definen asignando un dato al parámetro al declararlo
en la función.
function pordefecto ($parametro1="pepe";$parametro2=3)
Para la definición de función anterior, $parametro1 tiene como valor por
defecto "pepe", mientras que $parametro2 tiene 3 como valor por
defecto.
Si llamamos a la función sin indicar valores a los parámetros, estos
tomarán los valores asignados por defecto:
pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3
Si llamamos a la función indicando un valor, este será tenido en cuenta
para el primer parámetro.
pordefecto ("hola") // $parametro1 vale "hola" y
$parametro2 vale 3
Atención, estamos obligados a declarar todos los parámetros con valores
por defecto al final.
Retorno
de valores
Para saber las formas en que
una función devuelve valores este artículo contienen varias formas aptas para
hacerlo.
Las funciones pueden retornar valores. Para ello se utiliza la palabra
"return" indicando a continuación el dato o variable que tienen que
retornar. La función puede tener múltiples return, aunque sólo devolverá datos
por uno de ellos cada vez porque, cuando se llama a return, se termina la
ejecución de la función devolviendo el dato indicado.
Ejemplo de función IVA
Vamos a ver un nuevo ejemplo para ilustrar el funcionamiento de una
función un poco más avanzada, que utiliza parte de los nuevos conceptos
introducidos en este artículo.
Se trata de hacer una función que calcula el IVA y que recibe dos
parámetros. Uno el valor sobre el que se calcula y el otro el porcentaje a
aplicar. Si no se indica el porcentaje de IVA se entiende que es el 16%.
<html>
<head>
<title>ejemplo
IVA</title>
</head>
<body>
<?
function
iva($base,$porcentaje=16){
return
$base * $porcentaje /100;
}
echo iva(1000) .
"<br>";
echo iva(1000,7) .
"<br>";
echo iva(10,0) .
"<br>";
?>
</body>
</html>
Si se han entendido bien los conceptos, este ejemplo no puede resultar
difícil. La función recibe un parámetro llamado $porcentaje con 16 como valor
por defecto. Devuelve el porcentaje dado aplicado a la base también indicada
por parámetro.
Así pues, en la primera ejecución de la función, como no se indica el
porcentaje, se mostrará el 16% de 1000. En la segunda, se muestra el 7% de mil
y en la tercera, el 0% de 10.
Retornar múltiples valores
Una función devuelve un único valor. Si queremos hacer que se puedan
devolver varios valores distintos tenemos que recurrir a un truco que consiste
en devolver un array.
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
list() se usa para asignar una lista de variables en una sola operación.
Después de esa operación, $zero valdrá 0, $one valdrá 1 y $two valdrá 2..
También puede resultar muy práctico el utilizar una nomenclatura
sistemática a la hora de nombrarlas: Las funciones comerciales podrían ser
llamadas com_loquesea, las de bases de datos bd_loquesea, las de tratamiento de
archivos file_loquesea. Esto nos permitirá reconocerlas enseguida cuando leamos
el script sin tener que recurrir a nuestra oxidada memoria para descubrir su
utilidad.
No obstante, antes de lanzarnos a crear nuestra propia función, merece
la pena echar un vistazo a la documentación para ver si dicha función ya existe
o podemos aprovecharnos de alguna de las existentes para aligerar nuestro
trabajo. Así, por ejemplo, existe una función llamada header que crea un
encabezado HTML configurable lo cual nos evita tener que crearla nosotros mismos.
Como puede verse, la tarea del programador puede en algunos casos
parecerse a la de un coleccionista. Hay que ser paciente y metódico y al final,
a base de trabajo propio, intercambio y tiempo podemos llegar poseer nuestro
pequeño tesoro.
Ejemplo de función
Vamos a ver un ejemplo de creación de funciones en PHP. Se trata de
hacer una función que recibe un texto y lo escribe en la página con cada
carácter separado por "-". Es decir, si recibe "hola" debe
escribir "h-o-l-a" en la página web.
Nota:Para comprender este ejemplo necesitamos conocer el bucle for, que
se explica en el capítulo Control del flujo en PHP: Bucles II.
La manera de realizar esta función será recorrer el string, caracter a
caracter, para imprimir cada uno de los caracteres, seguido de el signo
"-". Recorreremos el string con un bucle for, desde el carater 0 hasta
el número de caracteres total de la cadena.
El número de caracteres de una cadena se obtiene con la función
predefinida en PHP strlen(), que recibe el string entre paréntesis y devuelve
el número de los caracteres que tenga.
<html>
<head>
<title>funcion
1</title>
</head>
<body>
<?
function
escribe_separa($cadena){
for
($i=0;$i<strlen($cadena);$i++){
echo $cadena[$i];
if ($i<strlen($cadena)-1)
echo "-";
}
}
escribe_separa
("hola");
echo
"<p>";
escribe_separa
("Texto más largo, a ver lo que hace");
?>
</body>
</html>
La función que hemos creado se llama escribe_separa y recibe como
parámetro la cadena que hay que escribir con el separador "-". El
bucle for nos sirve para recorrer la cadena, desde el primer al último
carácter. Luego, dentro del bucle, se imprime cada carácter separado del signo
"-". El if que hay dentro del bucle for comprueba que el actual no
sea el último carácter, porque en ese caso no habría que escribir el signo "-"
(queremos conseguir "h-o-l-a" y si no estuviera el if obtendríamos
"h-o-l-a-").
En el código mostrado se hacen un par de llamadas a la función para ver
el resultado obtenido con diferentes cadenas como parámetro. Podemos ver el
script en marcha.
Paso
de parámetros
Este capítulo pretende ser una ampliación de detalles que atañen al
artículo dedicado a las funciones en PHP.
Vamos a explicar algunos detalles adicionales sobre la definición y uso
de funciones, para ampliar el artículo de funciones en php.
Paso de parámetros
Los parámetros son los datos que reciben las funciones y que utilizan
para realizar las operaciones de la función. Una función puede recibir
cualquier número de parámetros, incluso ninguno. A la hora de definir la
función, en la cabecera, se definen los parámetros que va a recibir.
function f1 ($parametro1, $parámetro2)
Así definimos una función llamada f1 que recibe dos parámetros. Como se
puede observar, no se tiene que definir el tipo de datos de cada parámetro.
Los parámetros tienen validez durante la ejecución de la función, es
decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la
función se termina, los parámetros dejan de existir.
Los parámetros se pasan por valor
El paso de parámetros en PHP se realiza por valor. "Por valor"
es una manera típica de pasar parámetros en funciones, quiere decir que el
cambio de un dato de un parámetro no actualiza el dato de la variable que se
pasó a la función. Por ejemplo, cuando invocamos una función pasando una
variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro
de la función, la variable original no se ve afectada por ese cambio. Puede que
se vea mejor con un ejemplo:
function porvalor
($parametro1){
$parametro1="hola";
echo
"<br>" . $parametro1; //imprime "hola"
}
$mivariable =
"esto no cambia";
porvalor
($mivariable);
echo
"<br>" . $mivariable; //imprime "esto no cambia"
Esta página tendrá como resultado:
hola
esto no cambia
Paso de parámetros por referencia
En contraposición al paso de parámetros por valor, está el paso de
parámetros por referencia. En este último caso, el cambio del valor de un
parámetro dentro de una función sí afecta al valor de la variable original.
Podemos pasar los parámetros por referencia si, en la declaración de la
función, colocamos un "&" antes del parámetro.
<?
function
porreferencia(&$cadena)
{
$cadena = 'Si
cambia';
}
$str = 'Esto es
una cadena';
porreferencia
($str);
echo $str; //
Imprime 'Si cambia'
?>
Este script mostrará por pantalla 'Si cambia'.
Parámetros por defecto
Podemos definir valores por defecto para los parámetros. Los valores por
defecto sirven para que los parámetros contengan un dato predefinido, con el
que se inicializarán si no se le pasa ningún valor en la llamada de la función.
Los valores por defecto se definen asignando un dato al parámetro al declararlo
en la función.
function pordefecto ($parametro1="pepe";$parametro2=3)
Para la definición de función anterior, $parametro1 tiene como valor por
defecto "pepe", mientras que $parametro2 tiene 3 como valor por
defecto.
Si llamamos a la función sin indicar valores a los parámetros, estos
tomarán los valores asignados por defecto:
pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3
Si llamamos a la función indicando un valor, este será tenido en cuenta
para el primer parámetro.
pordefecto ("hola") // $parametro1 vale "hola" y
$parametro2 vale 3
Atención, estamos obligados a declarar todos los parámetros con valores
por defecto al final.
Retorno
de valores
Para saber las formas en que
una función devuelve valores este artículo contienen varias formas aptas para
hacerlo.
Las funciones pueden retornar valores. Para ello se utiliza la palabra
"return" indicando a continuación el dato o variable que tienen que
retornar. La función puede tener múltiples return, aunque sólo devolverá datos
por uno de ellos cada vez porque, cuando se llama a return, se termina la
ejecución de la función devolviendo el dato indicado.
Ejemplo de función IVA
Vamos a ver un nuevo ejemplo para ilustrar el funcionamiento de una
función un poco más avanzada, que utiliza parte de los nuevos conceptos
introducidos en este artículo.
Se trata de hacer una función que calcula el IVA y que recibe dos
parámetros. Uno el valor sobre el que se calcula y el otro el porcentaje a
aplicar. Si no se indica el porcentaje de IVA se entiende que es el 16%.
<html>
<head>
<title>ejemplo
IVA</title>
</head>
<body>
<?
function
iva($base,$porcentaje=16){
return
$base * $porcentaje /100;
}
echo iva(1000) .
"<br>";
echo iva(1000,7) .
"<br>";
echo iva(10,0) .
"<br>";
?>
</body>
</html>
Si se han entendido bien los conceptos, este ejemplo no puede resultar
difícil. La función recibe un parámetro llamado $porcentaje con 16 como valor
por defecto. Devuelve el porcentaje dado aplicado a la base también indicada
por parámetro.
Así pues, en la primera ejecución de la función, como no se indica el
porcentaje, se mostrará el 16% de 1000. En la segunda, se muestra el 7% de mil
y en la tercera, el 0% de 10.
Retornar múltiples valores
Una función devuelve un único valor. Si queremos hacer que se puedan
devolver varios valores distintos tenemos que recurrir a un truco que consiste
en devolver un array.
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
list() se usa para asignar una lista de variables en una sola operación.
Después de esa operación, $zero valdrá 0, $one valdrá 1 y $two valdrá 2.