Salta el contingut

Desenvolupament web dinàmic backend amb PHP
Conceptes

Sessió 4: Funcions / includes

Objectiu Sessió 4

Aprendre a generar i utilitzar funcions per a reutilitzar codi les vegades que faci falta per assolir l'objectiu, així com aprendre a desenvolupar aplicacions escalables.

Funcions

Enllaç a W3Schools i PHP.net

Una funció s'usa per estructurar el codi de manera descendent i poder usar i repetir la seva lògica tantes vegades com sigui necessari.

Una funció no s'executa quan s'interpreta l'script php, cal fer una crida a la mateixa.

La sintaxi és:
function nomFuncio(paràmetres)
{
    // lògica de la funció

    // valor de retorn?
}

Info

Una funció pot retornar o no un valor

Simplement caldrà posar return expresió;

En aquest cas, el valor de retorn serà null

El nom de la funció ha de començar amb una lletra o bé _.

Els noms de les funcions, respecte a case-sensitive:

- Al declarar-les.
    - Són **no case-sensitive**.
    - Donarà errada per duplicitat sense diferenciar majúscules de minúscules.
    - No diferencia entre majúscules i minúscules i les enten com al mateix identificador.
- Al cridar-les.
    - Són també **no case-sensitive**.
    - No donarà errada al diferenciar majúscules de minúscules al cridar-les.
    - Podem usar-les indistintament, però és recomanable fer-ho igual que com s'han declarat.

Cal tenir-ho present per que els identificadors de les variables en php siq eue són sensibles a les majúscules i ho diferencia en els dos casos.

Warning

function Exemple(){
    ...
}

i 
function exemple(){
    ...
} 

donaria errada de declaració per duplicitat de l'identificador!

Warning

function Exemple(){
    ...
}

Exemple();
exemple();

Faria la crida a la funció Exemple() dues vegades correctament !

Un petit exemple, de com definir i cridar a una funció sense paràmetres ni que retorni res.

1
2
3
4
5
6
7
8
9
<?php

    function Saludar()
    {
        echo "Hola a tothom!";
    }

    Saludar();
?>

Paràmetres

Els paràmetres o arguments ens permeten passar valor a dins de la funció i tindran un àmbit local de la mateixa.

Exemple 1 simple

    <?php

        function Saludar($nom)
        {
            echo "Hola " . $nom . "<br>";
        }

        Saludar("Pere");
        Saludar("Marta");
    ?>

Exemple molt bàsic

Definim una funció Saludar($nom), amb un argument/paràmetre $nom

Llavors fem la crida 'Saludar("Pere");'

Versió 7

A partir de la versió 7 del php, podem tipar els paràmetres i els valors de retorn

Conjuntament amb strict a la declaració, generarà una "Errada fatal!", si el tipus de dades no coincideix.

    declare(strict_types=1);

<?php

    function sumar(int $num1, int $num2): int
    {

        return (int) $num1 + $num2;
    }

    echo sumar(2,"3");
?>
El valor de "3" serà modificat a tipus int

El valor de retorn també serà de tipus int

En aquest exemple, ho forcem explícitament: (int)

Podem passar arguments per:

  • valor. Permet passar valors o agafar els valors dels arguments passats.
  • referència: usem & al davant de l'argument i farà referència a la posició de memòria

Exemple 2 arguments

    <?php
        function acumular(int &$num1, int $num2)
        {

            $num1 += $num2;
        }

        $a = 4;
        $b = 1;
        acumular($a,$b);
        var_dump($a); // 5
        echo "<br>";
        var_dump($b); // 1
    ?>

Exemple d'acumular un valor a una variable.

Noteu que no tenim cap return a la funció.

El segon valor s'acumula a la variable passada en primer argument.

Ho podem observar amb el var_dump($a);

Valors per defecte

Podem indicar un valor per defecte si no passem aquest argument. Ha d'estar a la dreta dels argument, com a últim passat.

Això permet cridar a la funció passant un diferent número d'arguments a la mateixa.

Per exemple podriem fer:

    Saludar();   -----> Saludaria a tothom
    Saludar("Pep"); --> Saludaria només a en Pep

Exemple 3 paràmetres per defecte

    <?php

        function acumular(int $num1, int $num2 = 1)
        {
            return $num1 + $num2;
        }

        $a = 4;
        $a = acumular($a);
        echo "<br>a: " . $a;
        $a = acumular($a,4);
        echo "<br>a: " . $a;
    ?>

Exemple d'acumular un valor a una variable. Si no passem el valor que volem acumular, que sigui 1.

Noteu que no tenim cap return a la funció.

El segon valor s'acumula a la variable passada en primer argument.

Versió 8

A partir de la versió 8 de php podem usar els paràmetres anomenats (named arguments)

Avantatges:

  • No cal respectar l'ordre dels arguments.
  • Es poden ometre arguments opcionals sense deixar valors buits.
  • Millora la llegibilitat del codi.
paràmetres anomenats
<?php

    function Saludar($nom, $cognom = "")
    {

        echo "Hola " . $nom . " " . $cognom;
    }

    Saludar(cognom: "Bosch", nom: "Maria");
?>

POO Mètodes

Més endavant veurem com la lògica de les funcions serà usada en la implementació dels mètodes d'una classe.

Això permetrà encarar el tema de desenvolupament d'arquitectura MVC.

Recursivitat

PHP permet recursivitat en la crida de funcions i es pot cridar a si mateixa.

    <?php    
        function mostra($numero) {    
            if($numero<=5){    
                echo "$numero <br/>";    
            mostra($numero+1);    
            }  
        }    

        mostra(1);    
    ?> 

Funcions PHP

Funcions

El llenguatge PHP incorpora una multitud de funcions que podem usar per a qualsevol proposit i les podem incloure directament al nostre codi, per exemple, la de comptar els caracters d'un string:

<?php
    echo strlen("Hello");
?>

En cas contrari hauriem de fer un codi similar a:

    obtenir 1r caràcter de la cadena
    compt = 0
    Mentre (Hi hagi més caràcters)
        compt +1
        obtenir següent caràcter
    FMentre
    Ara ja tenim el compt de caràcters

W3schools PHP reference

Includes

Enllaç a W3Schools i PHP.net

Els arxius include ens donen la oportunitat d'escriure funcions generals de la nostra aplicació i poder-la incloure en les diferents pàgines .php que desenvolupem.

Ens ajudarà a desenvolupar codi més estructurat.

Tenim diverses opcions:

  • include: inclou l'arxiu. Si no el troba, no l'inclou i continua.
  • require: inclou l'arxiu. Si no el troba, ara s'atura i dona errada.
  • include_once: inclou l'arxiu, només la 1a vegada. Si no el troba, no l'inclou i continua
  • require_once: inclou l'arxiu, només la 1a vegada. Si no el troba, ara s'atura i dona errada.

Tip

És important entendre que el contingut php s'inclou abans de que el servidor php l'executi, per tant, a efectes pràctics és com si fos el mateix fitxer. Però dividit en dues parts.

Warning

Si una variable o funció ja està definida en la part del fitxer que inclou, donarà una errada de identificador ja declarat!

Info

Podem veure com ho fem.