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).