Corso PHP: 8.9 – 8.13: declare / return / require / include / goto

8.9  declare

Il costrutto declare, usato per definire direttive di esecuzione per blocchi di istruzioni, lo nominiamo solo per completezza di documentazione, in quanto potreste vederlo nominato (difficilmente) da qualche parte, ma è in disuso e, a partire da PHP 6 verrà eliminato.

Viene usato nella forma:

 declare (direttiva)
    statement

dove direttiva può essere ticks o encoding.

Un tick è un evento che si verifica per ogni N istruzioni di basso livello (o blocco di istruzioni all’interno delle parentesi {}) eseguite dal parser all’interno del blocco declare. Quando si verifica il numero di ticks richiesto con la direttiva del costrutto declare [es. declare (ticks = 1)], PHP ferma quello che stava facendo, esegue le operazioni richieste con una specifica funzione e quindi torna all’esecuzione dello script interrotto. Usato pochissimo, se non per nulla e solo in fase di debugging.
La direttiva encoding viene invece usata per specificare il tipo di codifica usato. Per esempio si può scrivere:

 declare(encoding='ISO-8859-1');

Per chi volesse approfondire l’uso della direttiva declare (ticks = n), rimandiamo al manuale in linea del PHP (http://www.php.net/manual/it/control-structures.declare.php#control-structures.declare.encoding)

 

8.10   return

return viene usato all’interno delle funzioni e lo vedremo in particolare quindi quando esamineremo in dettaglio l’uso delle funzioni utente. Quando richiamato return conclude immediatamente l’esecuzione delle istruzioni della funzione e restituisce il suo argomento quale valore di ritorno della funzione (una funzione restituisce sempre un valore).

Se viene usato all’interno dello script principale e non in una funzione, l’esito sarà di terminare l’esecuzione dello script. Se usato in uno script richiamato da quello principale con una include od una require (vedi punti 8.11 e 8.12) termina l’esecuzione dello script richiamato ed il controllo ritorna a quello principale.

Esempio:

function miafunzione () {
   statement1
   statement2
   …..
   return $var;
}

8.11   require / require_once

8.12   include / include_once

Trattiamo congiuntamente I costrutti include e require perché hanno la medesima funzione. Con essi si possono includere all’interno di uno script delle parti di codice che risiedono in un file separato.
La differenza tra include e require sta esclusivamente nel fatto che se il file non viene trovato con include il PHP genera un warning e prosegue nella valutazione dello script, mentre nel caso di require viene generato un errore grave che blocca l’esecuzione dello script.

Da questo punto quindi faremo riferimento esclusivamente ad include tenendo presente che tutto ciò che diciamo per include è valido anche per require.

La differenza tra include e include_once invece, come dice la parola, è che la seconda viene eseguita una volta sola, anche se incontrata più volte. Può essere utile se l’include è ripetuta nello script (ma francamente sarebbe una cosa non giustificabile) oppure se l’include è all’interno di un ciclo (anche questa pratica direi che è assolutamente da evitare).

La sintassi è la seguente:

include(“filename”);

Possono essere usati gli apici invece delle virgolette.

Può anche essere usata una variabile che abbia come valore il nome del file. Ad esempio:

$nomefile = “config.inc.php”;
…….
include (“$nomefile”);

Va notato che in questo caso vanno usate le virgolette perché con le virgolette il PHP sostituirà a $nomefile il suo valore trasformandolo quindi in include (“config.inc.php”), mentre se usassimo gli apici $nomefile non verrebbe risolto e PHP andrebbe a cercare un file chiamato $nomefile.

Un’ultima annotazione a proposito del nomefile: se viene fornito solo il nome del file, questo verrà cercato nella directory principale del sito, altrimenti va indicata la path. Può anche essere utilizzato un intero URL per cui il file da includere può anche essere locato remotamente.

8.13   goto

Il costrutto goto può essere utilizzato per saltare ad un altra parte all’interno dello script.

Il punto dove saltare deve essere individuabile da PHP e quindi va anteponendo un’etichetta seguita dai due punti.

Il formato sarà dunque:

goto label1;
statement1
statement2
……..
label1:
statement3
statement4
….

goto label1; forzerà il salto allo statement3, saltando tutto ciò che si trova tra il goto e label1:. Naturalmente il goto può anche trovarsi dopo l’etichetta; in questo caso verrà forzato un riciclo a partire da label1:

Vi sono delle condizioni che devono essere rispettate. L’etichetta deve essere all’interno dello stesso file, inoltre non si può saltare fuori da una funzione o un metodo, e neppure saltare all’interno di una funzione. Inoltre non si può neppure saltare all’interno di un qualsiasi tipo di struttura di ciclo incluso lo switch. Si può invece saltarne fuori, praticamente utilizzando un goto al posto di un break.

Detto questo non si può non dire che l’uso del goto è da considerare uno dei peggiori orrori di un qualsiasi linguaggio di programmazione. Il goto può sempre essere evitato con l’uso corretto dei costrutti messi a disposizione dal linguaggio ed è buona norma non usarlo, perché rende quasi illeggibile il codice, complicando non poco la fase di debugging.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *