diff --git a/language/control-structures/do-while.xml b/language/control-structures/do-while.xml
new file mode 100644
index 000000000..8180afdad
--- /dev/null
+++ b/language/control-structures/do-while.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ do-while
+
+
+ I cicli do-while sono molto simili ai
+ cicli while, con la differenza che l'espressione di verità viene
+ controllata alla fine di ogni iterazione invece che all'inizio.
+ La differenza principale rispetto ai cicli while regolari è
+ che la prima iterazione di un ciclo do-while è
+ garantita (l'espressione di verità viene controllata solo alla fine
+ dell'iterazione), mentre potrebbe non essere necessariamente eseguita con un
+ ciclo while regolare (l'espressione di verità viene
+ controllata all'inizio di ogni iterazione, se viene valutata come
+ &false; fin dall'inizio, l'esecuzione del ciclo
+ terminerebbe immediatamente).
+
+
+ Esiste una sola sintassi per i cicli do-while:
+
+
+
+ 0);
+?>
+]]>
+
+
+
+
+ Il ciclo precedente verrebbe eseguito esattamente una volta, poiché dopo la prima
+ iterazione, quando l'espressione di verità viene controllata, viene valutata come
+ &false; ($i non è maggiore di 0) e l'esecuzione
+ del ciclo termina.
+
+
+ Gli utenti avanzati del C potrebbero conoscere un utilizzo diverso del
+ ciclo do-while, che permette di interrompere l'esecuzione nel
+ mezzo di blocchi di codice, incapsulandoli con
+ do-while (0), e utilizzando l'istruzione break.
+ Il seguente frammento di codice illustra questo:
+
+
+
+]]>
+
+
+
+
+ È possibile utilizzare l'operatore
+ goto
+ al posto di questo trucco.
+
+
+
+
diff --git a/language/control-structures/elseif.xml b/language/control-structures/elseif.xml
new file mode 100644
index 000000000..be725013e
--- /dev/null
+++ b/language/control-structures/elseif.xml
@@ -0,0 +1,120 @@
+
+
+
+
+ elseif/else if
+
+
+ elseif, come suggerisce il nome, è una combinazione
+ di if e else. Come
+ else, estende un'istruzione if
+ per eseguire un'istruzione diversa nel caso in cui l'espressione
+ if originale venga valutata come
+ &false;. Tuttavia, a differenza di
+ else, eseguirà quell'espressione alternativa
+ solo se l'espressione condizionale elseif
+ viene valutata come &true;. Ad esempio, il seguente
+ codice visualizzerebbe a is bigger than
+ b, a equal to b
+ o a is smaller than b:
+
+
+ $b) {
+ echo "a is bigger than b";
+} elseif ($a == $b) {
+ echo "a is equal to b";
+} else {
+ echo "a is smaller than b";
+}
+?>
+]]>
+
+
+
+
+ Possono esserci diversi elseif all'interno della stessa
+ istruzione if. La prima espressione
+ elseif (se presente) che viene valutata come
+ &true; verrebbe eseguita. In PHP, è possibile scrivere
+ else if (in due parole) e il comportamento sarebbe identico
+ a quello di elseif (in una sola parola). Il significato sintattico
+ è leggermente diverso (lo stesso comportamento del C) ma in sostanza
+ entrambi produrrebbero esattamente lo stesso comportamento.
+
+
+ L'istruzione elseif viene eseguita solo se l'espressione
+ if precedente e tutte le espressioni
+ elseif precedenti sono state valutate come
+ &false;, e l'espressione
+ elseif corrente viene valutata come
+ &true;.
+
+
+
+ Si noti che elseif e else if
+ saranno considerati esattamente equivalenti solo quando si utilizzano le parentesi graffe
+ come nell'esempio precedente. Quando si utilizzano i due punti per definire
+ le condizioni if/elseif, l'uso
+ di elseif in una sola parola diventa necessario. PHP
+ restituirà un errore di parsing se else if
+ è separato in due parole.
+
+
+
+
+
+ $b):
+ echo $a." is greater than ".$b;
+else if ($a == $b): // Will not compile.
+ echo "The above line causes a parse error.";
+endif;
+]]>
+
+
+
+
+
+ $b):
+ echo $a." is greater than ".$b;
+elseif ($a == $b): // Note the combination of the words.
+ echo $a." equals ".$b;
+else:
+ echo $a." is neither greater than or equal to ".$b;
+endif;
+
+?>
+]]>
+
+
+
+
+
+
diff --git a/language/control-structures/for.xml b/language/control-structures/for.xml
new file mode 100644
index 000000000..e0303dad5
--- /dev/null
+++ b/language/control-structures/for.xml
@@ -0,0 +1,181 @@
+
+
+
+
+ for
+
+
+ I cicli for sono i cicli più complessi in PHP.
+ Si comportano come i loro equivalenti in C. La sintassi di un
+ ciclo for è:
+
+
+
+
+
+
+
+ La prima espressione (expr1) viene
+ valutata (eseguita) una volta incondizionatamente all'inizio del
+ ciclo.
+
+
+ All'inizio di ogni iterazione,
+ expr2 viene valutata. Se viene valutata come
+ &true;, il ciclo continua e le istruzioni
+ annidate vengono eseguite. Se viene valutata come
+ &false;, l'esecuzione del ciclo termina.
+
+
+ Alla fine di ogni iterazione, expr3 viene
+ valutata (eseguita).
+
+
+ Ciascuna delle espressioni può essere vuota o contenere più
+ espressioni separate da virgole. In expr2, tutte le
+ espressioni separate da una virgola vengono valutate ma il risultato viene preso
+ dall'ultima parte.
+ expr2 vuota significa che il ciclo deve essere
+ eseguito indefinitamente (PHP lo considera implicitamente come
+ &true;, come il C). Questo potrebbe non essere così inutile come
+ si potrebbe pensare, poiché spesso si desidera terminare il ciclo utilizzando
+ un'istruzione condizionale break
+ invece di utilizzare l'espressione di verità del for.
+
+
+ Si considerino i seguenti esempi. Tutti visualizzano i numeri
+ da 1 a 10:
+
+
+ 10) {
+ break;
+ }
+ echo $i;
+}
+
+/* example 3 */
+
+$i = 1;
+for (; ; ) {
+ if ($i > 10) {
+ break;
+ }
+ echo $i;
+ $i++;
+}
+
+/* example 4 */
+
+for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
+?>
+]]>
+
+
+
+
+ Naturalmente, il primo esempio sembra essere il più elegante (o
+ forse il quarto), ma è possibile constatare che l'utilizzo di espressioni vuote
+ nei cicli for risulta utile in molte
+ occasioni.
+
+
+ PHP supporta anche la sintassi alternativa con i "due punti" per
+ i cicli for.
+
+
+
+
+
+
+
+ È comune per molti utenti iterare attraverso gli array come nell'esempio
+ seguente.
+
+
+
+
+ 'Kalle', 'salt' => 856412),
+ array('name' => 'Pierre', 'salt' => 215863)
+);
+
+for($i = 0; $i < count($people); ++$i) {
+ $people[$i]['salt'] = mt_rand(000000, 999999);
+}
+?>
+]]>
+
+
+
+
+ Il codice precedente può essere lento, poiché la dimensione dell'array viene calcolata
+ ad ogni iterazione. Poiché la dimensione non cambia mai, il ciclo può essere facilmente
+ ottimizzato utilizzando una variabile intermedia per memorizzare la dimensione invece
+ di chiamare ripetutamente count:
+
+
+
+
+ 'Kalle', 'salt' => 856412),
+ array('name' => 'Pierre', 'salt' => 215863)
+);
+
+for($i = 0, $size = count($people); $i < $size; ++$i) {
+ $people[$i]['salt'] = mt_rand(000000, 999999);
+}
+?>
+]]>
+
+
+
+
+
+