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….
…
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!