PHP, Web and Mobile development

Il linguaggio PHP 4

Iniziamo la nostra avventura PHP introducendo gli elementi fondamentali del linguaggio.

Nel precedente articolo abbiamo effettuato una breve panoramica sulle problematiche relative allo sviluppo di pagine web dinamiche utilizzando il PHP e delle caratteristiche offerte da questo linguaggio. Inoltre abbiamo affrontato la preparazione dell’ambiente di sviluppo dove testare i nostri esempi. In questo articolo, invece, illustreremo gli elementi fondamentali di questo linguaggio, addentrandoci nella sintassi del linguaggio e costruendo i primi esempi concreti di utilizzo.

Elementi fondamentali

Prima di qualsiasi altro elemento del linguaggio è necessario introdurre sia l’uso di commenti, sia l’uso del comando echo. I commenti in PHP hanno una sintassi identica a quella del ‘C’. Infatti è possibile utilizzare sia i commenti su una singola riga, tramite una doppia-slash (//), sia su piú righe, includendo il testo tra i simboli /* e */, come riportato nel Listato 1. Nell’esempio compare anche uno dei comandi piú frequentemente utilizzati, il comando echo. Questo comando manda in uscita sulla pagina HTML il risultato dell’espressione specificata come parametro.

Variabili e tipi di dato

Le variabili rappresentano l’elemento che rende possibile qualsiasi tipo di calcolo o elaborazione di dati. In PHP una variabile è identificata dal simbolo del dollaro ($) posto davanti al nome della variabile stessa. Ad ogni variabile è associato un tipo di dato di cui puo mantenere in memoria il valore. In PHP sono presenti i seguenti tipi di dato: interi, stringhe, vettori (array), numeri in virgola mobile (floating point), oggetti. Un esempio di utilizzo delle variabili è presente nel Listato 2. A differenza di altri linguaggi quali il ‘C’ o il Pascal, dove ogni variabile deve essere obbligatoriamente dichiarata prima di poter essere utilizzata, in PHP questo formalismo non è necessario in quanto, essendo un linguaggio interpretato, ogni variabile viene creata a runtime, ovvero al momento del caricamento della pagina. E’ anche possibile convertire una variabile da un tipo di dati all’altro, tramite l’operazione di typecasting, oppure tramite la funzione settype . L’operazione di typecasting funziona in maniera analoga al linguaggio ‘C’, anteponendo tra parentesi tonde il tipo di dato desiderato all’espressione da convertire, come illustrato nel Listato 3.

Operatori

Dopo aver visto i diversi tipi di dato vediamo ora come utilizzarli. Il PHP mette a disposizione i normali operatori aritmetici (Tabella 1) per effettuare calcoli, gli operatori di assegnazione (Tabella 2), gli operatori bitwise (Tabella 3) per operare direttamente sui bit di una variabile, gli operatori logici (Tabella 4) per operare nel campo dell’algebra booleana e gli operatori di confronto che sono quelli piú utilizzati nelle strutture di controllo. Per quanto riguarda le operazioni su stringhe, l’unico operatore disponibile è quello di concatenazione che, a differenza di altri linguaggi, è rappresentato dal simbolo del punto (.) come nel Listato 4. Sempre per quanto riguarda espressioni di tipo stringa è importante segnalare che al loro interno e’ possibile inserire caratteri speciali, come ad esempio il carattere di newline (\n), in maniera analoga al ‘C’.

Strutture di controllo

Come ogni linguaggio, ogni pagina PHP è costituita da una serie di istruzioni. Ogni istruzione puó essere di diversi tipi: un operazione su una variabile, una chiamata ad una funzione, una struttura di controllo, ecc. Ogni istruzione è separata dalle altre tramite un punto e virgola (;). Grazie a questa sintassi è anche possibile scrivere piú istruzioni sulla stessa riga di programma a danno ovviamente della leggibilità. In aggiunta a ció piú istruzioni possono essere ragruppate insieme, di solito all’interno di una struttura di controllo, tramite l’uso delle parentesi graffe ({ e }). Le strutture di controllo sono uno degli altri elementi fondamentali di un linguaggio, grazie a loro è possibile trasportare un algoritmo da un diagramma di flusso (flow chart) nel linguaggio di programmazione che si sta utilizzando.

La prima struttura di controllo è il blocco ”if”. Questa permette l’esecuzione di un blocco di codice a seconda o meno che una data espressione sia verificata. La struttura è utilizzabile attraverso diverse sintassi. La prima, consente l’esecuzione di un frammento di codice solo se una determinata espressione è vera, ed ha la seguente sintassi:

  if ($espressione) {
    ... istruzioni ...
  }

La seconda, invece, consente l’esecuzione di un frammento di codice in alternativa a quello eseguito quando l`espressione e vera:

if ($espressione) {
    ... istruzioni ...
  } else {
    ... istruzioni ...
  }

Nel caso di dover concatenare insieme diverse strutture di controllo è disponibile questa ulteriore sintassi che permette di evitare di scrivere codice inutilmente “nidificato”:

  if ($espressione1) {
    ... istruzioni ...
  } elseif ($espressione2) {
    ... istruzioni ...
  } else {
    ... istruzioni ...
  }

La struttura if è molto utile quando le espressioni da controllare sono diverse tra di loro, invece, nel caso in cui abbiamo l’esigenza di controllare il valore associato ad una singola espressione è possibile utilizzare la struttura “switch” che fornisce una sintassi piú semplice:

  switch ($espressione) {
    case 0:
      ... istruzioni ...
      break;
    case 1:
      ... istruzioni ...
      break;
    case 2:
      ... istruzioni ...
      break;
    default:
      ... istruzioni di default ...
  }

In questa struttura l’espressione segue tra parentesi tonde la parola riservata switch, mentre i diversi valori che puó assumere vengono elencati dopo la parola riservata case. Se nessuno dei valori specificati tramite case corrispondo alla nostra espressione, viene eseguito il blocco di codice opzionale definito successivamente alla parola chiave default.

Le strutture if e switch sono delle strutture di selezione, il blocco di codice al loro interno non viene eseguito o viene eseguito solo una volta. Introdurremo ora i loop (cicli) che hanno lo scopo di ripetere l’esecuzione di un blocco di codice zero o piú volte. Il tipo di loop piú semplice è il ciclo while. Questa struttura consente di ripetere un determinato blocco di istruzioni fintanto che una determinata espressione è vera. Ha la seguente sintassi:

  while ($espressione) {
    ... istruzioni ...
  }

Simile al ciclo while è la struttura do-while. Questa funziona in maniera analoga alla precedente, con la sostanziale differenza che l’espressione viene verificata al termine del ciclo, questo garantisce l’esecuzione del blocco di codice almeno una volta. La struttura ha la seguente sintassi:

  do {
    ... istruzioni ...
  } while ($espressione);

Differentemente dagli altri il ciclo for è la struttura piú complessa in quanto basata sull’uso di tre espressioni. Il suo scopo è quello di ripetere l’esecuzione di un blocco di codice un determinato numero di volta. Ha la seguente sintassi:

  for ( $espressione1 ; $espressione2 ; $espressione3 ) {
    ... istruzioni ...  
  }

Il ciclo for funziona esattamente come la sua controparte in linguaggio ‘C’. L’espressione 1 viene utilizzata per inizializzare un contatore, l’espressione 2 ha il compito di verificare che il valore del contatore sia vero, infine la terza espressione incrementa o modifica il contatore. Il ciclo for termina quando la seconda espressione diventa falsa. Un esempio pratico è il Listato 5. Nell’esempio viene utilizzato un ciclo for per creare una pagina dinamica che visualizzi un titolo secondo tutte le sei variazioni possibili in HTML.

A volte puó tornare utile alterare l’esecuzione del programma quando si trova all’interno di uno qualsiasi dei loop visti finora. Per far ció sono disponibili due parole chiave: break e continue. L’utilizzo di break causa l’immediata uscita dal ciclo attualmente in esecuzione. L’utilizzo di continue, invece, consente di evitare l’esecuzione di tutte le istruzioni contenute nel blocco del ciclo riprendendo l’esecuzione del programma all’inizio dell’iterazione successiva.

Conclusioni

Con questo articolo abbiamo affrontanto gli elementi fondamentali del linguaggio PHP. Nel prossimo potremo iniziare ad affrontare la costruzione delle nostre prime applicazioni sul web, in particolare tratteremo la gestione dei form e l’accesso alle basi di dati. Per chi desidera approfondire in anticipo questi argomenti puó nel frattempo accedere al manuale del PHP online [1], in particolare alla sezione dedicata al database MySQL.

Riferimenti

[1] http://www.php.net/manual/it/ref.mysql.php

Tabella 1

Operazione Descrizione
$op1 + $op2 Addizione
$op1 – $op2 Sotrazione
$op1 * $op2 Moltiplicazione
$op1 / $op2 Divisione
$op1 % $op2 Modulo

Tabella 2

Operazione Descrizione
$op1 = $op2 Assegnazione
$op1 += $op2 Incremento ed assegnazione
$op1 -= $op2 Decremento ed assegnazione
$op1 .= $op2 Concatenamento ed assegnazione
$op1 ++ Incremento
$op1 — Decremento

Tabella 3

Operazione Descrizione
$op1 & $op2 And
$op1 | $op2 Or
$op1 ^ $op2 Xor
~ $op1 Not (complemento)
$op1 << $op2 Shift a sinistra
$op1 >> $op2 Shift a destra

Tabella 4

Operazione Descrizione
$op1 and $op2 And logico
$op1 or $op2 Or logico
$op1 xor $op2 Xor logico
! $op1 Not (negazione)
$op1 && $op2 And logico ma con differente precendeza
$op1 || $op2 Or logico ma con differente precedenza

Tabella 5

Operazione Descrizione
$op1 == $op2 Uguaglianza
$op1 != $op2 Non uguale
$op1 < $op2 Minore
$op1 > $op2 Maggiore
$op1 <= $op2 Minore o uguale
$op1 >= $op2 Maggiore o uguale

Listato 1

<html>
<head><title>Listato 1</title></head>
<body>
<pre>
<?
 /* 
  * Questo e' un commento
  * che comprende piu' linee
  */

  // Questo, invece, e' un commento su una sola riga ...

  // ... nulla vieta di ripere il commento anche su righe diverse
  echo "<b><u>Ciao, questo e' il Listato 1 !</b></u>";

?> 
</pre>
</body>
</html>

Listato 2

<html>
<head><title>Listato 2</title></head>
<body>
<pre>
<?

  // intero
  $i = 54321;		
  echo "i=$i <br>";

  // stringa
  $s = 'testo';	
  echo "s=$s <br>";

  // array
  $a[0] = 'testo';	
  echo "a(0)=". $a[0] ." <br>";

  // virgola mobile
  $f = 1.2e3;		
  echo "f=$f <br>";

  // intero espresso in notazione esadecimale
  $e = 0xFF;		
  echo "e=$e <br>";

?> 
</pre>
</body>
</html>

Listato 3

<html>
<head><title>Listato 3</title></head>
<body>
<pre>
<?
  // da floating point ad intero
  $i = (int)5.4321;
  echo "i=$i\n";

  // da intero a stringa stringa
  $s = (string)74 . 'X';
  echo "s=$s\n";

  // in virgola mobile
  $f = (float)10/3;
  echo "f=$f\n";

?>
</pre>
</body>
</html>

Listato 4

<html>
<head><title>Listato 4</title></head>
<body>
<pre>
<?

  // inizializza la variabile 'h'
  $h = "Salve ";
  echo "h=$h<br>";

  // concatena 'h' alla stringa "gente"
  $hw = $h . "gente!";
  echo "hw=$hw";

?>
</pre>
</body>
</html>

Listato 5

<html>
<head><title>Listato 5</title></head>
<body>
<pre>
<?

  // scrive tutti i titolo da <h1> fino ad <h6>
  for ( $i=1 ; $i <= 6 ; $i++ ) {
    echo '<H'. $i .'>Titolo '. $i .'</H'. $i .'>';
  }

?>
</pre>
</body>
</html>