Vedi e individua le nozioni principali:
Manuale PHPBreve prefazione + Autori e Collaboratori:
PrefazioneAlcune considerazioni preliminari (forse non così utile come prima lettura):
IntroQUELLO DA STUDIARE:
Il linguaggio di programmazione PHPNOTA: La funzionalità di PHP per highlight il codice PHP in una pagina HTML, come sotto:
highlight-string (un trucco utile per pubblicare e commentare il codice)
Preliminari
PHP tags, Instructions, Comments (cose banali, ma da capire per poter procedere):
Basic Syntax
<?php // PHP tags, in apertura e chiusura del file .php
echo 'This is a test'; // Questo è un commento su una stessa riga
/* Questo è un commento su più righe
ecco qui la seconda riga */
echo 'This is yet another test'; // nota il punto e virgola per separare una istruzione dalla successiva
?>;
This is a testThis is yet another testOne Final Test
Script. Statements, Istruzioni.
Uno
script PHP è un file scritto in linguaggio PHP, salvato nel webserver con estensione .php, composto da righe di codice, ognuna della quali è uno
statement, dove:
vedi qui: any PHP script is built out of a series of statements. A statement can be an assignment, a function call, a loop, a conditional statement or even a statement that does nothing (an empty statement). Statements usually end with a semicolon. In addition, statements can be grouped into a statement-group by encapsulating a group of statements with curly braces. A statement-group is a statement by itself as well.
In inglese, si usa la parola statements ma c'è una qualche ambiguità, confrontate queste due definizioni da wikipedia:
- A statement is a sentence that says something is true, like "Pizza is delicious." [...] All statements claim something or make a point. If you witness an accident, you make a statement to police, describing what you saw.
- Statement (computer science): in computer programming, a statement is a syntactic unit of an imperative programming language that expresses some action to be carried out. A program written in such a language is formed by a sequence of one or more statements. A statement may have internal components (e.g., expressions)
La seconda, ma non la prima, definisce nel senso di un imperativo, che è appunto il senso usato in informatica
In particolare:
- assigment: (assegnamento) assegnare un valore a una variabile (vedi sotto) o a un array (vedi sotto)
- function call: PHP permette di definire delle funzioni, anche passando dei parametri, e poi di richiamarle quando, nel corso dello script, si vuole utilizzare il valore che la funzione elabora, per dettagli (vedi sotto)
- loop e conditional statement: sono i due casi principali delle cosidette control structure, mediante cui si può programmare lo svolgimento ripetuto di una qualche operazione fino al mantenersi di una qualche condizione, oppure rispettivamente a seconda del verificarsi di una o più condizioni. Anche per questo vedi sotto. (vedi sotto)
Uno script è quindi un elenco di istruzioni, più o meno semplci, che qualcuno - il compilatore PHP - esegue per ottenere un risultato.
Echo
Siccome PHP è un linguaggio di programmazione orientato al Web, comprende delle funzionalità predefinite per permettere l'interazione client-server su cui si basa il funzionamento del Web, e in particolare per la la creazione e l'invio al client - il browser - (del codice) delle pagine web. In particolare comprende alcune istruzioni per inviare un testo dal lato server al lato client, e la principale tra queste è
echo
echo 'Mario'
che noi leggeremo
stampa, o
invia Vedi
echo.
Variabili
Variabili:
VariabiliVariables in PHP are represented by a dollar sign followed by the name of the variable. The variable name is case-sensitive.
(
case sensitive significa che è differente scrivere minuscolo da maiuscolo)
<?php
$var ='Mario';
$Var = 'Maria';
echo $var, " e ". $Var; // outputs "Mario e Maria"
$var = 'Paolo';
echo $var; // outputs "Paolo"
$var = 'il mio nome è '.$var;
echo $var; // outputs ??
?>
Mario e Maria
Paolo
il mio nome è Paolo
-----
Nota: puoi anche scrivere
$$var
<?php
$a = 'hello';
$$a = 'world';
echo $a. '' . $hello; // outputs ??
echo $a. '' .${$a}; // outputs ??
?>
hello world
hello world
-----
NOTA: Nel gioco dell'impiegato, può essere utile pensare all'istruzione di definire (meglio
inizialiazzare) una varibiale con
$a = b come all'istruzione di creare una
busta scrivendoci sopra l'etichetta
a e inserendovi all'interno il contenuto
b. Ovviamente, se poi riceverete l\`istruzione di mostrare il contenuto della busta
$a, prenderete la busta con etichetta
$a, la aprirete e mostrerete il valore
b. Similmente
echo $a outputs
b -----
RICORDA
= non è l'uguaglianza
Quando si scrive
$a = a, il simbolo
= ha un valore operativo, indica l'assegnare il valore
a alla variabile
$a.
DA NON CONFONDERE con l'operazione di confrontare due espressioni per controllare se hanno lo stesso valore, operazione che pure si può compiere, e si indica con l'operatore
==, vedi qui sotto.
Array
Vedi definizione più tecnica a
Array In breve, gli array sono un meccanisco che permette di assegnare una lista di valori indicizzata da chiavi :
key →
value; ad ogni chiave corrisponde un valore:
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
echo $array['foo']; // che valore si stampa?
echo $array['bar']; // che valore si stampa?
// multidimensionale
$array = array(
"mario" => "maria",
2 => 3,
"bar" => array(
"more" => array(
"bar" => "foo",
"foo" => $array
)
)
);
echo $array['mario']; // che valore si stampa?
echo $array[2]; // che valore si stampa?
echo $array['bar']['more']['bar']; // che valore si stampa?
echo $array['bar']['more']['foo']['foo']; // che valore si stampa?
?>
1
barfoomaria3foobar
NOTA: Pensa a un array come una generalizzazione delle variabili. Se le varibili sono buste con un contenuto, gli array sono bustoni, che contengono delle buste, ognuno con un proprio contenuto; e gli array multidimensionali sono bustoni di bustoni di ... con buste con un contenuto.
Foreach, For
Per utilizzare i dati assegnati ad un array, PHP prevede due costrutti di scansione dell'array:
Foreach e
For. Detto sbrigativamente,
Foreach e
For scorrono l'array, chiave per chiave, permettendo di accedere al corrispondente valore:
<?php
// considera che in php puoi avere
// array associativo
$disney = array("pippo" => "goofy", "paperino" => "donald");
foreach($disney as $key => $value) {
echo "it=" . $key . ", en=" . $value . "</br>";
}
// array indicizzato
$disney = array("goofy", "donald");
$arrlength = count($disney);
for($x = 0; $x < $arrlength; $x++) {
echo $disney[$x]."</br>";
}
?>
1
it=pippo, en=goofyit=paperino, en=donaldgoofydonald
Istruzioni, Espressioni
I linguaggi di programmazione, e tra questi PHP, hanno anche la possibilità di esprimere delle proposizioni, ovvero delle espressioni che possono essere valutate come
Vere o
False.
La domanda da farsi è quindi:
quale proposizioni sono formulabili in PHP? Ovvero, quali espressioni sono tale che PHP può valutare se siano Vere o False?
La risposta è: in PHP sono formulabili le usuali proposizioni, che diremo atomiche, in cui si compara due valori:
a == b, a > b, a >= b, a != b (avere lo stesso valore, avere valore maggiore di, avere valore maggiore o uguale e rispettivamente non avere lo stesso valore), in particolare la comparazione può essere sia tra numeri sia tra stringhe.
Inoltre sono formulabili e valutabili le
combinazioni proposizionali mediante i connettivi
&& (e, congiunzione, AND),
|| (o, disgiunzione, OR),
! (non, negazione) delle proposizioni atomiche:
<?php
echo 'aaa'=='aaa';
echo 'aaa'=='bbb';
echo 3+4==7;
echo 3+4==8;
echo (3+4==7 && 3>5);
echo (3+4==7 || 3>5);
echo (3+4!=8 || !(3>5));
echo ('aaa'!='bbb' || !(3>5));
?>
1
0
1
0
0
1
1
1
NOTA: consulta il manuale per la lista completa degli operatori con cui si possono formulare proposizioni atomiche. In particolare studia:
- le operazioni aritmetiche +, -, *, /, % , ** (quelle della scuola elementare) e come puoi comporre gli usuali termini aritmetici, 3+5, -9, 8*9, 7/7, 7%6, ovviamente anche iterando 3+(4/(7%5))-1, e come puoi usare tali termini per comporre delle proposizioni aritmetiche elementari, utilizzando come detto:
- gli operatori di comparazione ==, !=, >, <, >=, <=: (8*9+3)==(8/4+6%4).
- similarmente anche per la comparazione tra stringhe: 'aaa'>'aaaa'; 'aaa'.'bbb'=='aaabbb';
- e infine ricorda che puoi anche scrivere TRUE and FALSE.
Tipi di dati: Stringhe, Numeri, TRUE/FALSE
I valori, o dati, che possono essere elabarati da PHP sono di diversi tipologia, PHP prevede cioè diversi
tipi di dati. In particolare, i principali tipi di dati sono le
stringhe (di caratteri alfanumerici), i
numeri (...,-3,-2,-1,0,1,2,3,...), i
booleani, cioè i due valori TRUE (VERO) e FALSE (FALSO). (vi sono altri tipi di dati, poi vedremo meglio).
Alcune prime utili informazioni sono :
- una qualsiasi sequenza di caratteri è una stringa: 'a]23HHt/&%zp0?_:d.'.
- le stringhe si compongono con l'operatore di concatenazione, indicato dal punto (dot): '.': 'aaa'.'bbb' è la stringa 'aaabbb'
(sembra banale, ma è utile e necessario, vedi sopra l'esempio di Hello World);
- le stringhe si delimitano tra apici semplici '' oppure tra apici doppi "", dove per es., se $a='bbb';:
- usando apici doppi " ", una espressione $a che occorre all'interno dei doppi apici sarà interpretata come una variabile ed espansa nel suo valore, così che l'output di echo "a $a" sarà a bbb;
- mentre usando apici singoli, l'output di echo 'a $a' sarà: a $a
(per ottenere a bbb come sopra dovrò scrivere echo 'a'.$a, concatenando le due stringhe 'a' e $a).
- i numeri sono i numeri interi, negativi e positivi {... -2,-2,-1,0,1,2,3,....}. Abbiamo già come PHP sappia eseguire le operazioni aritmetiche fondamentali.
NOTA: I numeri non si scrivono tra apici. Se scrivete qualcosa come a+3 confondendo stringhe con numeri, PHP interpreta il tutto come una stringa, esattamente la stringa composta dai caratteri a, + e 3
NOTA ALLA NOTA: Cercando qualche semplice esempio, ho trovato alcune (apparenti?) incongruenze che dovremo chiarirci, ma per ora non ce ne preoccupiamo
<?php
echo 'a+3';
echo 2+4;
echo '2+4'; // nota, delimitando tra apici, PHP interpreta come stringa!
----- ma alcune cose strane da chiarirci -----
echo '3+a'; // -> stringa 3+a
echo 'a+3'; // -> stringa a+3
echo 3+'3+a'; // -> numero 6 (?)
echo 'a+3'+3; // -> numero 3 (?)
echo 3+'a+3'; // -> numero 3 (?)
echo a+'a+3'; // -> numero 0 (?)
echo 'a+3'+a; // -> numero 0 (?)
?>
a+3
6
2+4
--------
3+a
a+3
6
3
3
0
0
- I booleani servono per calcolare le tavole di verità delle usuali combinazioni proposizionali tra espressioni.
Logical Operators / Tavole di Verità
| Example |
Name |
Result |
| $a and $b |
And |
TRUE if both $a and $b are TRUE. |
| $a or $b |
Or |
TRUE if either $a or $b is TRUE. |
| $a xor $b |
Xor |
TRUE if either $a or $b is TRUE, but not both. |
| ! $a |
Not |
TRUE if $a is not TRUE. |
| $a && $b |
And |
TRUE if both $a and $b are TRUE. |
| $a || $b |
Or |
TRUE if either $a or $b is TRUE. |
Le espressioni che possono essere composte mediante i connettivi proposizionali sono quelle di comparazione tra termini aritmetici, quelle di comparazione tra stringhe (anche concatenate tra di loro) e i valori True e False (Vero e Falso, ovviamente!)
<?php
echo !(((0+(3/(7%6)))==2));
echo 'aaa'.'uuu' != 'aaauu';
echo TRUE && FALSE;
echo !(((0+(3/(7%6)))==2) && (('aaa'.'uuu' != 'aaauu'))) || (TRUE && (((4+9)!=9)));
echo 1==1;
echo 1==0;
?>
1
1
0
1
1
0
RIPRODUCI QUESTI E SIMILARI ESEMPI SUL TUO WEB SERVER!!
Considera il seguente form, e come puoi elaborare i dati provenienti dal client, compilando il form.
<?php
<a href="#example">esempi</a>
echo '\<form action="php.php" method="post">
<label for="fn">scrivi un numero</label>
<input type="text" name="primo">
<label for="sn">scrivi un numero</label>
<input type="text" name="secondo">
<input type="submit" value="Invia">
</form>
';
$N = $_POST['primo']; $M = $_POST['secondo'];
?>
qui
PRIMO ESEMPIO
if(){}else{}
<?php
if($N<$M){echo $N . ' è minore di '.$M;}else{echo $N . ' NON è minore di '.$M;}
?>
NON è minore di
--------------------
SECONDO ESEMPIO
if(){}elseif(){}else{}
<?php
if($N+$M<100){echo 'la somma di '.$N . ' e ' . $M .' è '.($N+$M).', ed è minore di 100';}elseif(($N+$M)==100){echo 'la somma di '. $N . ' e ' . $M .' è '.($N+$M).', ed è esattemanente uguale a 100';}else{echo 'la somma di '.$N . ' e ' . $M .' è '.($N+$M).', ed è maggiore di 100';}
?>
la somma di e è 0, ed è minore di 100
--------------------
TERZO ESEMPIO
while(){}
Scrivo tutti i numeri compresi tra i due inseriti nel modulo (ma non sempre funziona, controlla perchè):
<?php
$i=0;
while($N+$i<$M+1){echo $N + $i. ' -- '; $i=$i+1;}
?>
0 --
--------------------
QUARTO ESEMPIO
while(){}
Scrivo tutti i numeri compresi tra i due inseriti nel modulo:
<?php
if($N<$M){$i=0; while($N+$i<$M+1){echo ($N + $i). ' -- '; $i=$i+1;}}else{$j=0; while($M+$j<$N+1){echo $M + $j. ' -- '; $j=$j+1;}}
?>
0 --
--------------------
QUINTO ESEMPIO
while(){}
Se i due numeri non sono sucessivi, scrivo ogni altro numero compreso tra i due inseriti nel modulo (come si fa?):
<?php
if($N<$M){$i=0; while($N+$i<$M+1){echo ($N + 2*$i). ' -- '; $i=$i+1;}}else{$j=0; while($M+$j<$N+1){echo $M + $j. ' -- '; $j=$j+1;}}
?>
0 --
DA FINIRE
chissà quando e come :-)