I programmatori sono una razza incredibilmente pigra: se trovano una tecnica che dà la possibilità di poter scrivere 3 linee di codice in meno rispetto a quello che facevano prima, la adottano subito.

Più avanti vi capiterà di dover scrivere funzioni che il 98% delle volte accetta sempre lo stesso valore in ingresso ma quel 2% vi impedisce di eliminare quel parametro, così siete costretti ad inserire lo stesso parametro in continuazione.

Ma ecco che gli autori di PHP si sono inventati i valori di default. Potete infatti decidere di assegnare un valore di default ad ogni parametro della funzione quando la dichiarate.

Quando andrete a chiamare la funzione, potrete evitare di inserire questo parametro e il valore di default verrà usato.
Ogni volta che inserirete un valore esplicitamente il valore di default verrà invece ignorato.

<?php
 
/* funzione che stampa il nome del webserver */
 
function stampa_webserver ($nome = "apache")
{
  echo "il webserver su cui sta girando questo script è $nome\n";
}
 
/* quale sarà l'output delle seguenti chiamate? */
 
stampa_webserver ();
stampa_webserver ();
stampa_webserver ();
stampa_webserver ("iis");
stampa_webserver ();
stampa_webserver ();
stampa_webserver ("apache2");
stampa_webserver ();
 
?>

Un’ultima precisazione su questa fantastica tecnica. Ricordate sempre di mettere tutti gli argomenti opzionali con valore di default dopo tutti gli altri argomenti obbligatori.

Anche se possibile non devono esserci argomenti non opzionali dopo il primo con valore di default quindi fate molta attenzione perché questo può portare ad errori molto subdoli e difficili da trovare.

<?php
 
/* funzione con alcuni parametri obbligatori e alcuni opzionali */
 
function funzione_giusta ($a, $b, $c, $K = 10, $delta = 0.001)
{
  /* fa qualcosa ... */
 
}
 
/* questa funzione è sbagliata.*/
 
function funzione_sbagliata ($a, $tipo = "dV", $b, $ris)
{
  /* fa altre cose... */
 
}
 
/* Chiamate di esempio */
 
funzione_giusta (1,2,3);
funzione_giusta (1,2,3,1000);
 
/* in questo caso $b va in $tipo mentre $ris in $b lasciando
   scoperta la variabile obbligatoria $ris */
 
funzione_sbagliata ($a,$b,$ris);
 
?>

vicius