4 commenti php

Spesso determinati dati e/o determinate funzioni contenute in alcuni file devono essere disponibili in più pagine. Ciò comporterebbe la riproposizione in ognuna delle pagine gli stessi contenuti presente in molte altre.

 

Per esempio pensiamo al footer e all'header di un sito web: questa parte di codice X/HTML dovrebbe essere riscritta in tutte le nostre pagine web; poi, nel caso in cui volessimo modificarle, saremo costretti a modificare una per una le pagine web!!

Tuttavia per agevolarci in tali casi vi è la possibilità, tramite il php, di creare un unico file che contenga il footer ed un altro che contiene header ed "includerli" in tutte le pagine che lo necessitano: nel caso volessimo modificare una parte di questi basterà modificare unicamente il file che lo contiene mentre nelle altre pagine che lo includono si determina una modifica immediata simultanea.

Si può ben comprendere come in tal modo si raggiunga una maggiore efficienza e gestibilità dei contenuti.

 

Le inclusione di file è una pratica frequentissima nella programmazione e viene effettuata utilizzando i costrutti require(), require_once(), include() e include_once().

Il comportamento e la sintassi è del tutto identico per entrambi i costrutti e le uniche differenze si hanno nell'eventualità in cui il file venga incluso più volte o non dovesse essere trovato. Vediamone le differenze in questa tabella riassuntiva:

Funzione

In caso di doppia inclusione

In caso di file non trovato

require

il file verrà incluso per la seconda volta

genera un parse error che interrompe l'esecuzione dello script

include

il file verrà incluso per la seconda volta

genera un warning che non interrompe l'esecuzione dello script

require_once

il file non verrà incluso per la seconda volta

genera un parse error che interrompe l'esecuzione dello script

include_once

il file non verrà incluso per la seconda volta

genera un warning che non interrompe l'esecuzione dello script

 

La sintassi è la seguente:

<?php
require("file.php");
include("file.php");
require_once("file.php");
include_once("file.php");
?>

 

Il file incluso, da un punto di vista logico, farà parte in tutto e per tutto del file che lo include. Tutte le variabili, le funzioni e le classi definite nel file incluso saranno visibili dal file che lo include proprio come se fossero stati definiti nel file stesso. Facciamo un esempio chiarificatore:
Immagginiamo di avere il file a.php contenente il seguende codice:

<?php
$var = "miniscript";
?>

 

Ora includiamo tale file nel file b.php:

<?php
include("a.php");
echo $var;
?>

 

La variabile $var è presente in a.php ma tramite l'inclusione di tale file questa variabile sarà a tutti gli effetti presente nel file b.php.

Il file che si andrà ad includere verrà cercato nella cartella corrente ma sarà possibile definire il percorso assoluto o relativo del file da includere.

Nel caso in cui si hanno file inclusi da file che sono al loro volta inclusi la logica è un pò più complessa: l'inclusione in quesi casi farà una duplice ricerca del file, prima nella cartella corrente e, se non trovato, sarà cercato nella cartella del file incluso. E' più semplice al farsi che al dirsi, facciamo un esempio:

Poniamo di avere un file a.php che include il file b.php presente nella cartella corrente:

<?php
include("b.php");
?>

 

Poniamo adesso di trovarci nella sottocartella e il file c.php include il file a.php:

<?php
include("dir/a.php");
?>

 

Dato che il file a.php contiene l'inclusione di b.php anche il file c.php avrà tale inclusione: il file b.php verrà cercato prima nella cartella corrente (in cui si trova c.php) e se non trovato verrà cercato nella cartella "dir" (in cui si trova a.php).

 

Prima di concludere vorrei sottolineare i casi in cui è opportuno utilizzare require, anzichè include; nonchè i casi in cui occorre impiegare le versioni delle due funzioni con once.

 

Come visto in precedenza require, a contrario di include, interrompe la lettura l'interpretazione del codice se il file non è stato individuato. La maggiore "severità" alle volte è necessaria. Pensiamo ai casi in cui impieghiamo funzioni o classi definite nel file che andremo ad includere: se il file non è stato individuato è necessario interrompere il codice dato che senza quelle funzioni o classi lo script comunque non funzionerebbe e, anzi, potrebbe dar luogo a risultati imprevisti.

 

Per quel che concerne la versione con once delle due funzioni è giustificata anch'essa nell'ambito delle inclusioni di file che contengono funzioni e classi, cosa che avviene con forte frequenza. Questi qualora siano inclusi più di una volta generano un FATAL ERROR di questo tipo:

Fatal error: Cannot redeclare NomeFunzione()

 

Tale errore ci dice che non è possibile ridefinire una funzione con lo stesso nome: per evitare il presentarsi di questo tipo di errore è opportuno utilizzare le le versioni con once che ignorano una seconda inclusione del file.

 

In virtù di tali considerazioni tutte le volte in cui si includono file in cui vengono definite classi e funzioni è consigliabile l'utilizzo di require_once().

 

Vai alla lezione successiva

Vai alla lezione precedente

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

4 Commenti presenti

avatar Olimpio Romanella

Olimpio Romanella

02 January 2014 ore 18:30

@Antonio: non capisco a quale link ti riferisci.

avatar Antonio

Antonio

02 January 2014 ore 17:13

@Olimpio Romanella:
ha ricevuto il link?

avatar Olimpio Romanella

Olimpio Romanella

21 December 2013 ore 02:46

@Antonio: onestamente non ho compreso la domanda

avatar Antonio

Antonio

20 December 2013 ore 13:03

Salve
io ho un menu con diverse voci :
home - contact - about - miao - bau
Se io premo su una di queste voci il menu scompare e deve uscire solo il tasto home , e la voce del menu cliccato .
quindi sto valutando se fare tante pagine con tutta la struttura (cambiata per ogni voce)
pensandoci però visto che il menu comunque cambia completamente, credo mi convenga fare altre pagine uguali ma completamente diversa a livello visivo, oppure potrei utilizzare dei div, ma qui già il discorso cambia ! HELP ! :D