Sie sind auf Seite 1von 4

Funciones de usuario

¿Qué son las


Funciones de usuario
funciones de usuario? Imaginémonos, allá por el mes de junio, sentados ante una mesa tratando de hacer la
declaración de la renta. Para ese menester seguramente nos pertrecharíamos –además del
De igual forma que ocurre con el impreso oficial de la declaración– con: calculadora, lápiz, goma de borrar e incluso con las
navegador en el caso del HTML, disposiciones legales relativas al impuesto.
PHP lee e interpreta las
instrucciones contenidas en los Seguramente iríamos leyendo y cumplimentando el impreso oficial –script PHP–
scripts de forma secuencial. partiendo de la primera página –orden secuencial– y continuando de forma ordenada
hasta el final.
Es decir, las instrucciones se van
ejecutando en el mismo orden en
La calculadora, la goma, etcétera –funciones– estarían disponibles para ser utilizadas –
el que aparecen en el documento
original, con la excepción de las invocadas– tantas veces como fuera preciso y, además, no serían elementos exclusivos
funciones. de ese documento, sino que seguirían disponibles para otros usos –scripts– distintos, tales
como la planificación financiera de nuestras vacaciones, por citar un ejemplo.
En este caso, los bloques de
instrucciones son puestos a Las funciones de usuario son, como la calculadora o la goma, herramientas
disposición de PHP, pero no se diseñadas para facilitar las tareas y susceptibles de ser usadas en una o varias situaciones –
ejecutarán hasta el momento en scripts– diferentes.
que sean requeridas de forma
expresa. Ejemplos de funciones de usuario
¿Dónde Con este primer ejemplo obtendremos una página en blanco. El script contiene una
deben insertarse? función pero no hay ninguna instrucción que la invoque y por lo tanto no se ejecutaría.

Aunque en versiones antiguas de <?


PHP era necesario definir la function a1(){
función antes de invocarla, a partir
de la versión 4 no es necesaria for($i=1;$i<=10;$i++){
esa organización secuencial. echo $i,"<br>";
}
La función pueden estar escrita
dentro de cualquier script y en }
cualquier parte del documento, sin ?>
que tenga importancia alguna el
lugar en el que se incluya la
llamada a la misma.
ejemplo64.php

También es posible –y bastante


habitual– incluir funciones de uso <?
frecuente en documentos externos a1();
de modo que pueden ser ?>
compartidas. <!-- Hemos escrito un script con una llamada
En este caso, además de invocarla
a la función a1 que aún no está definida.
es necesario indicar a PHP el lugar Tendremos que hacerlo, pero no importa
donde debe buscarla. Hablaremos la parte del documento en la que lo hagamos
de ello cuando estudiemos lo La pondremos en este nuevo script PHP //-->
relativo a include.
<?
function a1(){
Definición de la función
for($i=1;$i<=10;$i++){
echo $i,"<br>";
Las funciones de usuario requieren }
la siguiente sintaxis:
}
function nombre(){ ?>
.....
... instrucciones ...
.....
ejemplo65.php
}

Es imprescindible respetar En este otro ejemplo veremos las diversas situaciones que pueden plantearse respecto
estrictamente la sintaxis que al ámbito de las variables.
requiere de forma obligatoria los
siguientes elementos:
<?
– La palabra function debe estar # definamos dos variables y asignémosles un valor
escrita en minúsculas. $a=5; $b=47;
# escribamos una funcion a1 y pidámosle que imprima sus valores
– El nombre de la función, que
debe seguir criterios similares a los
function a1(){
de los nombres de variables,
echo "Este es el valor de $a en la función a1: ",$a,"<br>";
aunque en este caso no se
antepone el símbolo $ ni ningún echo "Este es el valor de $b en la función a1: ",$b,"<br>";
otro. }
# hagamos una llamada a la funcion anterior
–Los paréntesis (), incluso cuando # no nos escribirá ningún valor porque esas variables no pertenecen
no contengan nada. # al ámbito de la función y serán consideradas como vacias
# en el ambito de la funcion
– Las llaves de apertura ({) y
a1();
cierre (}) dentro de las cuales se
escribirán las instrucciones # escribamos una nueva función, definamos como global $a
correspondientes a ella. # y comprobemos que ahora si la hemos incluido en el ambito
# de la funcion
function a2(){
Ejecución de la función global $a;
echo "Este es el valor de $a en la función a2: ",$a,"<br>";
Las funciones PHP no se ejecutan echo "Este es el valor de $b en la función a2: ",$b,"<br>";
en tanto no sean invocadas. }
# invoquemos esta nueva funcion y veamos que ahora
Para invocar una función la
# si se visualiza el valor de $a pero no el de $b
sintaxis es la siguiente:
a2();
nombre() # creemos una nueva funcion y ahora modifiquemos dentro de ella
Al ser llamada con esta sintaxis – # ambas variables
desde cualquier script– se function a3(){
ejecutarán las instrucciones global $a;
contenidas en ella. $a +=45;
$b -=348;
Ámbito de las variables echo "Este es nuevo valor de $a en la función a3: ",$a,"<br>";
echo "Este es el valor de $b en la función a3: ",$b,"<br>";
Resumamos lo ya comentado }
cuando tratamos el tema de las
# invoquemos la funcion a3
variables.
a3();
– Las funciones no leen valores de # comprobemos -desde fuera del ámbito de la función
variables definidas fuera de su # que ocurrió con los valores de las variables
ámbito salvo que dentro de la echo "El valor de $a HA CAMBIADO despues de ejecutar a3 es: ",$a,"<br>";
propia función se definan de forma echo "El valor de $b NO HA CAMBIADO despues de ejecutar a3 es: ",
expresa como globales. $b,"<br>";
# probemos que ocurre con una variable superglobal
– Si una función modifica el valor
# veremos que sin ser definida expresamente en a4
de una variable global, el nuevo
valor persiste después de # si pertenece a su ambito y por lo tanto visualizamos su contenido
abandonar la función. function a4(){
print "La superglobales si están: ".$_SERVER['SERVER_NAME']."<br>";
– Si dentro de una función se }
utiliza un nombre de variable # invoquemos esta nueva funcion
idéntico al de otra externa a ella a4();
(sin definirla global) la nueva ?>
variable se inicia con valor nulo y
los eventuales valores que pudiera
ir conteniendo se pierden en el ejemplo66.php
momento en que se acaba su
ejecución.

Asignación de valores a <?


$a=-13; $b=7482; $c="Ambrosio";
variables
# esta es una forma alternativa de asignar valores a una variable
A las variables no globales se les # del ambito de la función
pueden asignar sus valores function a1($a=56, $b=25){
iniciales de dos formas: echo "El valor de $$a en la función a1: ", $a,"<br>";
echo "El valor de $$b en la función a1: ", $b,"<br>";
• Incluyéndolas en una línea de }
instrucciones contenida en la a1();
propia función.
echo "El valor de $a despues de ejecutar la función es: ",$a,"<br><br>";
• Insertando los nombres de
variable y sus valores dentro del
paréntesis que –de forma
obligatoria– debe seguir al nombre # Pasando valores desde la llamada a la función #
de la función. En este caso la /* Definamos una función fun1 e incluyamos dentro de su paréntesis
sintaxis sería: nombres de variables, separados por comas pero ahora sin asignarles
ningún valor */
function nom ($a=v1,$b=v2)
function fun1($x,$y,$z){
donde $a y $b son nombres de print "Valor de la variable x: ".$x."<br>";
variables a utilizar en el ámbito de print "Valor de la variable y: ".$y."<br>";
la función y v1 y v2 los valores print "Valor de la variable z: ".$z."<br>";
asignados a cada una de ellas. }
En este paréntesis pueden incluirse
–separándolas con comas–
cuantas parejas var = val sean
necesarias. # debemos hacer la llamada a la función pero ahora
# lo haremos de forma distinta.
• Una forma alternativa a la # Vamos a incluir en la llamada
anterior sería la siguiente: # los valores que queremos asignar a las variables de la función
# Escribiremos dentro del paréntesis de la llamada
function nom ($a,$b) # los valores de cada una de las tres variables
donde habría que asignar los # separados por comas
valores de cada una de la variables # (si se trata de una cadena, pongámosla entre comillas)
desde la llamada a la función, que # y veremos con la función recoge esos valores asignados
ahora tendría esta sintaxis: #en la llamada

nombre (valor1, valor2,...); fun1(14,"Robustiano",23.4);


/* si esta llamada contuviera más de tres valores
en la que se escriben los valores
separados por comas, y los ultimos serian ignorados */
encerrados entre comillas cuando fun1(49.3,"Eustaquio",78,"Lupicio",456);
se trata de variables alfanuméricas. # si contuviera menos de tres valores
# PHP nos daría un mensaje de error
Si el número de valores contenidos # advirtiendo que falta un valor
en la llamada fuera mayor que el # pero nos devolvería los valores
número de variables definidas en fun1("Desiderio","Bailador");
la función, los excedentes serían
ignorados y, si fuera inferior, se
# esos mensajes de error podríamos evitarlos
asignaría valor nulo a las variables
a las que no se transfiriera ningún # poniendo una arroba delante de la llamada a la función
valor. @fun1("Nuevo Desiderio","Nuevo Bailador");

• También es posible incluir en la


llamada a la función los nombres # tambien podría utilizarse una sintaxis como esta
de algunas variables definidas en # en la que dejamos en blanco (entre comillas)
el ámbito externo a la función. Se # el espacio correspondiente al segundo valor
haría de la siguiente forma: # aunque si incluimos las comas.
nombre ($var1, var2,...); # La variable que ocupa esa posición
# sería considerada como nula
fun1("La luna",'',"verde");
Pasar por referencia
# también podríamos incluir en la llamada nombres de variables
Tal como hemos visto, las # definidas en el ámbito general del sript
# un este caso la función usaria esos valores
funciones PHP pueden recibir
valores de variables externas y
utilizar esos valores sin que el fun1($a,$b,$c);
valor original de las mismas –salvo
que se les asigne la condición de ?>
globales dentro de la función–
sufra modificación.
ejemplo67.php
Una manera de lograr que los
valores una variable externa
puedan ser modificados por una <? $a=3; $b=2;
función, es lo que se llama en function a1(&$a,$b){
argot informático «pasar variables $a=pow($a,2);
por referencia».
$b=pow($b,3);
La forma de hacerlo es esta: echo "El cuadrado de a dentro de la función es: ",$a, "<br>";
echo "El cubo de b dentro de la función es: ",$b, "<br><br>";
Hay que anteponer al nombre de }
la variable el símbolo & y PHP
interpretará que la estamos a1($a,$b);
pasando por referencia.

El & puede anteponerse tanto en


echo "Al salir de la función a conserva la modificación: ",$a, "<br>";
la definición de la función como en echo "Por el contrario, b no la conserva: ",$b, "<br><br>";
la llamada a la función, tal como
puedes ver en el ejemplo. $c=8; $d=12;
function b1($a,$b){
La segunda de las opciones nos $a=pow($a,2);
concede mayor libertad dado que $b=pow($b,3);
permite usar una sola función y echo "El cuadrado de a dentro de la función es: ",$a, "<br>";
decidir en cada llamada la forma
echo "El cubo de b dentro de la función es: ",$b, "<br><br>";
de pasar los parámetros.
}
¡Cuidado!
b1(&$c,$d);
Si tratas de ejecutar una función
en la que colocas el & en la echo "Al salir de la función c conserva la modificación: ",$c, "<br>";
llamada a la función y te aparece echo "Por el contrario, d no la conserva: ",$d, "<br><br>";
un mensaje como este:
?>
«Warning: Call-time pass-by-
reference has been deprecated -
argument passed by value; If you
would like to pass it by reference,
modify the declaration of function
(). If you would like to enable call- ejemplo68.php
time pass-by-reference, you can
set
allow_call_time_pass_reference to
Ejercicio nº 26
true in your INI file».

lo que estará ocurriendo es que el En este ejercicio –ejercicio26.php– utilizaremos una función para construir tablas similares
php.ini del servidor tiene a las que hemos construido en el ejercicio nº 23. Pero incorporaremos una innovación
configurada en Off la directiva: respecto a aquel. Ahora la función debe permitir construir tablas de cualquier dimensión –nº
de filas y/o columnas– y el número de estas habremos de incluirlo en la llamada a esa
allow_call_time_pass_reference
función.
y eso suele ocurrir con algunos
hostings y también con la
configuración por defecto de Otras funciones de usuario
algunas versiones de PHP
anteriores a la que estamos
<? function Encabezado() { ?>
utilizando.
<!-- Hemos abierto la función y cerrado la etiqueta PHP
todo esto es código HTML //-->
Otra forma de definir <HTML>
funciones de usuario <HEAD>
<TITLE>Titulo de mi página</TITLE></HEAD>
Existe otra opción de definición de <BODY BGCOLOR="#FF0000">
funciones de usuario que puede <!-- Esta nueva llamada a PHP
resultar de mucho interés. En este insertando la llave de cierre de la función
caso la función se define en tres indicará a PHP que debe escribir todo lo
bloques: contenido entre la { y esta } //-->
<? } ?>
– Definición de la función, llave
de apertura y cierre del script PHP.
<? function Pie() { ?>
– Contenido de la función <HR>
formado exclusivamente por </BODY>
código HTML, que se escribiría </HTML>
cuando fuera invocada la función <? } ?>
que lo contiene. <!-- Utilizaremos esas dos funciones para
crear una página web. Llamamos a la función Encabezado
– Cierre de la función (llave de
luego escribimos un texto y por ultimo insertamos
cierre) contenido en un script PHP,
es decir, entre las etiquetas de el Pie de página con la función Pie //-->
apertura <? y cierre ?> de PHP. <? Encabezado(); ?>
Este es texto que aparecerá en el cuerpo de la página.
Cuando es invocada una función Está fuera de los scripts de php y será considerado
definida de esta forma –puedes como un texto HTML. Debajo aparecerá la línea horizontal
verlo en el ejemplo– PHP se limita que insertaremos mediante una nueva llamada a la función Pie
a escribir en el documento final los
textos contenidos entre la etiqueta <? Pie(); ?>
de apertura y cierre de la función.

Las funciones de esta forma son


ejemplo68a.php
particularmente útiles para la
construcción de espacios web que
contienen una serie de páginas en Anterior Indice Siguiente
las que se repiten las mismas
estructuras.

Das könnte Ihnen auch gefallen