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)UN GIOCO DA COMPIERE. NOTA: Per iniziare a familiarizzarsi con la stile della programmazione, può essere utile che immaginiate di svolgere il seguente gioco: siete un impiegata/o è dovete eseeguire -senza chiedere chiarimenti a voce- una serie di istruzioni del vostro capoufficio. Queste istruzioni sono scritte in un linguaggio molto semplice, che comprende
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 :-)