Curso PHP 5 || V. Declaracion y llamado de funciones

Actividades IV

1.   Con  datos inventados crea array para los diferentes casos:
a)   La nota y el ID de cada estudiante según su grupo


<?php
$estudiantes 
= array( 'group1' => array ('user1' => array ('nota' => 4,
                                             
'id' => 1),
                               
'user2' => array ('nota' => 6,
                                             
'id' => 2)
                               ),
                
'group2' => 'etc');
?>


b)   Cantidad de stock de cada producto en una tienda

<?php

$tienda 
= array( 'product1' => 'stock',
             
'product2' => 10);
?>


c) Nombres de las personas de tu familia

<?php

$familia 
= array ('name1''name2''name3');

?>


d) Nombre edad y parentesco con las personas de tu familia

<?php

$family 
= array ( 'hermano' => array('juan''esteban'),
              
'hermana' => 'julia',
              
'padre' => 'ernest',
              
'madre' => 'juana');
?>


Este último también se podía hacer tipo el de la tienda.


VII.    Creando Funciones propias

A día de hoy, está muy bien visto el reutilizar código.
Si tenemos una determinada acción que se repetirá más de una o dos veces y que los cambios en ambos procesos son menores quizá nos convenga crear una función para dicho proceso y así evitarnos líneas repetitivas y errores en la programación.
Los argumentos de una función son datos extra que le pasamos a esta para que realice la acción, si por ejemplo tenemos una función que muestra un mensaje envuelto en etiquetas h1, el argumento a enviarle es el texto a mostrar.

Tenemos 2 tipos de funciones:

-   De dirección única: A las cuales podemos, o no, pasarle argumentos pero no devuelven un valor
-   De dos direcciones: a las cuales le pasamos argumentos y nos retornan un valor.

Para este último podríamos tener una función de comprobación de usuarios y en caso de coincidir los datos devuelve true o false si alguno es incorrecto.

Las variables dentro de una función son distintas a las de fuera de la función, como si vivieran en mundos separados. Este apartado se explicará más adelante, pero es importante tenerlo presente.

Declarar y llamar funciones:


Como habrá notado, todo (o casi todo) en PHP son funciones, como echo printf o strcasecmp, los parámetros que les enviamos funcionan de la misma manera que lo harán nuestras funciones.
Para declarar una función usaremos la palabra function seguida del nombre que asignemos a la función y los paréntesis, estos no son obligatorios pero ayudan a la comprensión del código por lo que es recomendable ponerlos.

Inserta ste codigo en tu site:
<?php
function page_header() {
   echo 
'<html><head><title> MI pagina web</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}
page_header();

?>


Este código es un ejemplo de la declaración de una función, su cometido es imprimir el código HTML del head de nuestras páginas web.
La forma de llamar a la función es la última línea.
Los nombres de las funciones siguen la misma regla que los de la variable, empiezan por una letra o un subrayado y pueden contener letras, números y subrayados.
Las funciones pueden ser llamadas antes o después de ser declaradas y funcionan de igual forma.
En el código siguiente se aprecia como una función es llamada antes de ser declarada sin problema alguno.

<?php

function page_header() {
   echo 
'<html><head><title> MI pagina web</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}


page_header();
page_foot();

function 
page_foot() {
   echo 
'</body></html>';
}
?>


Enviar parámetros a las funciones

Ahora nos planteamos, ¿Qué pasa si queremos que el título de la web sea diferente para cada sección?
Para conseguir eso utilizaremos los argumentos.


<?php

function page_header($title="indice") {
   echo 
'<html><head><title>MiWeb || '.$title.'</title></head>
        <body bgcolor="#ECE6B4" text="#ffffff">'
;
}

page_header("Seccion 1");


?>


En el código podemos notar 2 grandes diferencias:
En la línea que declaramos la función agregamos un $title=”índice” entre paréntesis.
$title es el nombre que adquirirá la variable e índice el valor en caso de que al llamarla no se proporcione uno.
Si no agregamos el valor por defecto, y dejamos algo como page_header($title), al llamar la función obtendremos un error por falta de parámetros.

Y una cosa más, los valores por defecto no pueden ser variables.
Para pasar múltiples parámetros a una función solo hay que concatenarlos con comas.

<?php

function page_header($title="indice"$fondo$text='#ECE6B4') {
   echo 
'<html><head><title>MiWeb || '.$title.'</title></head>
        <body bgcolor="'
.$fondo.'" text="'.$text.'">';
}

page_header("Seccion 1""#ffffff");

?>


Es recomendable, y una buena práctica, que los parámetros obligatorios se sitúen al principio de la declaración (es decir, en el ejemplo, $fondo sería el primer parámetro).

Retornar valores de una función

No sería lógico decir que una función puede retornar valores y no enseñar cómo.
El retorno de datos se hace con la sentencia return y solo puede ejecutarse un return por sentencia (pero puede haber varios) ya que al ejecutarse el primer return el programa sale de la función

<?php

function suma5 ($value) {
   
$value $value 5;
   return 
$value;
}

echo 
suma5(6);
?>


A esta función se le envía un valor (6) y le suma 5 y devuelve el resultado.
El retorno se puede enviar directamente a una función o almacenarlo en una variable.

Entendiendo el ámbito de las variables.

La forma más fácil de entender este apartado es con ejemplos, así que me voy a matar poco en la explicación.
Las funciones tienen variables de ámbito privado o local, eso quiere decir que si en una función usamos la variable $count y dicha variable no está definida fuera, la variable no existirá.
Así mismo si en el programa principal usamos la variable $precio, y dicha variable no está definida en la función, la variable no existirá.
Veamos unos ejemplos:

<?php
function ambito() {
   echo 
$numero;

}
$numero 5;
echo 
ambito();

?>


En este ejemplo no hay salida ya que la variable $numero no fue declarada en la función.

<?php
function ambito() {
   
$numero 3;
   echo 
$numero.'<br />';

}

echo 
ambito();
echo 
$numero."!!!!";

?>


Aquí vemos como en el echo de la función sí que está declarada (pues la declaramos arriba), pero fuera ya no.
Por si aún se alberga alguna duda:

<?php
function ambito() {
   if (!
$numero)
      
$numero 3;
   echo 
$numero.'<br />';

}
$numero 1;
echo 
ambito();
echo 
$numero."!!!!";

?>


Este último ejemplo un poco más elaborado, da el valor 1 a $numero, llama a la función.
En la función, si el valor $numero no está definido lo define a 3 y lo muestra, sale de la función.
Muestra el valor de $numero.

Si probáis el código, ya no deberíais albergar duda sombre el ámbito de las variables.

Pero… ¿Qué pasa si quiero usar una variable de fuera de la función?

Esta pregunta tiene 2 respuestas:
- Si el objetivo es proporcionar alguna información, podemos pasarlo como parámetro
- Si el objetivo es modificar la variable original podemos usar las 2 formas siguientes:

<?php
function ambito() {
   global 
$numero;
   echo 
$numero.'<br />';
   
$numero 4;

}
function 
ambito2() {
   echo 
$GLOBALS['numero'];
}
$numero 3;
ambito();
ambito2();


?>


En estas 2 funciones comprobamos las 2 formas de acceder a una variable externa.
En ámbito, comprobamos como podemos alterar el número original mostrando así el número modificando en ambito2.

$GLOBALS[] es uno de los tantos arrays que existe dentro de PHP, este contiene todas las arrays globales del script.

Actividades V

Crea un programa en PHP a forma de calculadora utilizando el mínimo de funciones posible.

Crea un programa en PHP en el que tengas que exponer todo lo aprendido en este apartado



Versión .doc: Funciones.doc
Versión .pdf: Funciones.pdf