PHPBlog.it

Include, require, echo, print… Ma che confusione!

Mi è capitato più volte di chiedermi che significato avessero tutte quelle funzioni e tutti quegli operatori apparentemente simili, come ad esempio quattro diverse funzioni per gestiore l’inclusione di files all’interno di uno script, o la presenza di tre differenti operatori di uguaglianza.
La mia pigrizia ha sempre fatto si che io stessi fermo e continuassi a chiedermelo senza cercare una risposta. Oggi, invece, mi sono fatto coraggio ed ho cercato nella documentazione di PHP una risposta a questi interrogativi esistenziali. Eccola riassunta in poche righe…

I lati ambigui del php: Include, include_once, require, require_once.

include: Include un file all’interno dello script, nel caso si generi un errore l’output sarà un “semplice” warning, ovvero un errore che non comprometterà il ciclo di esecuzione dello script.

include_once: Include un file, è la funzione analoga di include, con la differenza che se un file è già stato incluso evita di includerlo nuovamente.

require: È la funziona analoga di include, con la differenza che nel caso in cui si verifichi un errore si interromperà l’esecuzione dello script.

require_once: Include un file, è la funzione analoga di require, con la differenza che se un file è già stato incluso evita di includerlo nuovamente.

Traiamo le conclusioni: include ed include_once si possono usare, entro i loro limiti, per includere parti di scripts la quale assenza non compromette seriamente l’output, viceversa usate require e require_once se l’assenza dei files genererà errori critici o che compromettono l’output.

=, == e === all’interno delle condizioni

Prima di cominciare a distinguere i vari operatori di confronto è necessario ricordare che in PHP, anche se non apparentemente, come in tutti gli altri linguaggi di programmazione sono presenti variabili di tipo diverso, stringhe, array, interi e così via.

$a=1
$b="1"

if($a=$b) echo "sono riuscito ad assegnare a b il valore di a";
Infatti un singolo segno di uguale all’interno di una condizione farà verificare che l’assegnazione sia andata a buon fine

if($a==$b) echo "il contenuto di a e di b è uguale";

Di fatti il contenuto delle variabili $a e $b è uguale, ma l’operatore == non distingue i tipi di files!

if($a===$b) echo "il contenuto ed il tipo di variabile dichiarato in a ed in b risulta uguale";
else echo "il contenuto di a e di b risulta uguale, ma i tipi di variabile sono differenti!";

La sequenza di tre segni di uguale serve infatti a confrontare due variabili sia dal punto di vista del contenuto, sia dal punto di vista del tipo di variabile!

print, printf, print_r, echo…

La differenza fra print ed echo è che utilizzando print si può verificare l’avvenuta stampa a schermo, possiamo ad esempio verificarlo tramite questa condizione:

$pippo=print "Ciao mondo!";
if($pippo) print "<br>Ho stampato correttamente la variabile pippo";

Se provassimo a sostituire echo alla “funzione” print otterremo il seguente errore: Parse error: syntax error, unexpected T_ECHO in file_di_prova.php on line 2

fprintf() (restituisce il numero di bits stampati), sprintf() e printf() stampano a schermo un output formattandolo secondo le direttive del parametro format (se conoscete il C sappiate che è la medesima cosa)

print_r invece si occupa di stampare una variabile “formattata” in un output che non sarebbe altrimenti leggibile, è molto utile negli array, vediamo un esempio:

$astuccio=array("penna", "temperino", "gomma");
print_r($astuccio);

Questo genererà un output simile al seguente: Array ( [0] => penna [1] => temperino [2] => gomma )

Commenti

  • Questo articolo è stato segnalato su ZicZac.it….

  • Lorenzo scrive:

    Ho una domanda relativa a questo argomento.
    Supponi di avere un file php che contiene alcune funzioni e delle istruzioni di output (echo …)
    Io vorrei usare alcune funzioni ma non avere l’output.
    Se uso require o include, ottengo anche l’output.
    Esiste un modo di “includere” solo le funzioni?

  • Sinceramente non so risponderti con certezza, anche se ho sempre separato le librerie di funzioni dall’output proprio per evitare questo problema, aspettiamo di sentire cosa ne pensano gli altri autori!

  • Lascia un Commento

    *