back to top

Creare funzioni personalizzate in PHP

In questa lezione vedremo cos’è una funzione e come possiamo creare delle funzioni personalizzate in PHP. Prima di entrare nel vivo, tuttavia, dobbiamo farci una domanda: cos’è una funzione?

Una funzione è una porzione di codice caratterizzata da una certa indipendenza ed in grado di assolvere un compito specifico all’interno di un programma.

Mediante una funzione, di solito, si assolve un compito ben preciso che solitamente necessita di essere ripetuto più volte all’interno del programma. Così facendo, infatti, si snellisce il codice dell’applicazione e viene a semplificarsi il lavoro dello sviluppatore.

Per fare un esempio si pensi al calcolo dell’IVA su un prezzo: la procedura per svolgere tale calcolo matematico è sempre la stessa e potrebbe essere richiesta in più punti di un programma. In circostanze come questa, quindi, la soluzione più logica è quella di incorporare la relativa procedura all’interno di una funzione che potrà poi essere richiamata ogni volta che ce ne sarà bisogno.

Funzioni native vs. funzioni proprie

Una funzione si dice “nativa” quando è incorporata nel linguaggio; si dice “propria” o “personalizzata” quando è definita dal programmatore all’interno del codice di un programma.

Nel corso della nostra guida abbiamo già incontrato diverse funzioni native di PHP come, ad esempio, la funzione header() e la funzione cookie() ma ovviamente ne esistono diverse centinaia per gli scopi più diversi (alcune delle più importanti funzioni native di PHP le vedremo nelle prossime lezioni).

Creare una funzione in PHP

Una funzione personalizzata in PHP è definita mediante la keyword function seguita dal nome della funzione e dall’elenco di eventuali parametri richiesti racchiusi tra parentesi tonda. Di seguito la sintassi per la creazione di una funzione:

function nome_funzione($arg1,$arg2,...) {
  // ...
  // ...
  // ...    
}

Si noti che è anche possibile creare funzioni senza alcun parametro, in tal caso le parentesi tonde dopo il nome resteranno vuote:

function nome_funzione() {
  // ...
  // ...
  // ...    
}

Gli argomenti elencati tra parentesi tonde sono obbligatori in quanto funzionali ell’esecuzione della procedura delegata alla funzione. Tuttavia è anche possibile prevedere argomenti facoltativi semplicemente prevedendo un valore di default (cioè un valore da utilizzare nel caso in cui non ne venga settato un altro):

function nome_funzione($arg1,$arg2,$arg3=false) {
  // ...
  // ...
  // ...    
}

// utilizzo
$var = nome_funzione(10,8);

// oppure
$var = nome_funzione(10,8,true);

Nell’esempio visto qui sopra la funzione ammette tre argomenti dei quali i primi due sono obbligatori mentre il terzo è facoltativo e qualora venga omesso avrà come valore false.

All’interno della nostra funzione (dove abbiamo messo i puntini, per intenderci) andremo scrivere una serie di istruzioni PHP sulla base delle regole e delle logiche che abbiamo visto sino ad ora all’interno della nostra guida: potremo usare variabili, strutture condizionali, cicli e quant’altro ci verrà utile.

E’ importante sottolineare, tuttavia, che all’interno della nostra funzione avremo a disposizone tutte le variabili ricevute in argomento e le variabili superglobali (come, ad esempio, $_GET, $_POST, $_SESSION, ecc.) mentre le variabili definite all’interno del nostro programma (ma esternamente alla funzione) non saranno accessibili se non esplicitamente "importate".

Per utilizzare variabili esterne alla funzione si utilizza l’istruzione global seguita dal nome delle variabili (separate da virgola) che si desidera utilizzare all’interno della funzione. Vediamo un esempio:

$nome = 'Mario';
$cognome = 'Rossi';

function scrivi_nome() {
  global $nome, $cognome;
  return $nome . ' ' . $cognome;    
}

echo scrivi_nome();

Nell’esempio appena visto abbiamo incontrato l’istruzione return che è utilizzata per restituire il valore "calcolato" dalla nostra funzione. Utilizzando return il valore restituito all’interno del programma può essere memorizzato all’interno di una variabile. Tornando all’esempio visto poco sopra avremmo potuto fare:

$nome_completo = scrivi_nome();

E’ bene precisare che quando si usa return si esce dalla funzione quindi, eventuale codice successivo ad un return non verrà elaborato. Vediamo un esempio:

function divisione($n1,$n2) {
  if ($n2 == 0) return 'Non puoi dividere per zero!';
  return ($n1/$n2);    
}

// stampo il risultato
echo divisione(10/0);

Nell’eempio visto sopra non è stato necessario utilizzare un else in quanton il verificarsi della condizione ha prodotto il return che chiude la funzione.

L’utilizzo di return, tuttavia, non è obbligatorio: se il risultato dell’elaborazione non necessità di essere incapsulato in una variabile o nuovamente elaborato, nulla vieta di utilizzare un semplice echo (o altro comando o istruzione):

function divisione($n1,$n2) {
  if ($n2 == 0) echo 'Non puoi dividere per zero!';
  else echo ($n1/$n2);    
}

// stampo il risultato
divisione(10/0);

Richiamare una funzione

Come abbiamo già visto nei precedenti esempi per utilizzare una funzione è sufficiente richiamarne il nome indicando, ove necessario, i parametri richiesti in argomento. Ad esempio:

// funzione senza argomenti e con valore di ritorno
$var = nome_funzione(); 

// funzione con argomenti e con valore di ritorno
$var = nome_funzione($arg1,$arg2);

// funzione senza argomenti e senza valore di ritorno
nome_funzione(); 

// funzione con argomenti e senza valore di ritorno
nome_funzione($arg1,$arg2);

Un esempio completo: una funzione per calcolare il prezzo con IVA

Per concludere questa lezione vediamo un esempio completo di funzione PHP personalizzata. Vediamo di seguto una funzione per il calcolo del prezzo + IVA:

function prezzo_ivato($prezzo) {
  $aliquota = 22;
  $prezzo_ivato = ($prezzo*(100+$aliquota))/100;
  return number_format($prezzo_ivato,2,',','');   
}

// utilizzo la funzione
$prezzo = 70;
$prezzo_finale = prezzo_ivato($prezzo);
echo 'Il prezzo finale è di ' . $prezzo_finale . ' Euro';
Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).