
|
<? $a=10 ; echo "\$a = $a <BR>" ; $a="Bonjour à tous !"; echo "\$a = $a "; ?> |
$a = 10 $a = Bonjour à tous ! |
Conversion de types des variables :
par l'opérateur d'addition + L'opérateur + est réservé à l'addition (la concaténation étant l'opérateur .) Il cherche à convertir des chaines en nombres avant évaluation, si cela est possible. Par exemple, comparer :
<? $a = 3 ; $b=" 7 rue Linux Torwalds" ; $c= $a + $b ; echo " \$a + \$b = $a + $b <BR>" ; echo " \$a + \$b = $c" ; ?> |
$a + $b = 3 + 7 rue Linux Torwalds $a + $b = 10 |
par "cast" (semblable à Java) $a = 3.543 ; $b = (int) $a + 1 ; $ch = "les ". (string) $b ." saisons" ---> $b= 4 ; $ch = "les 4 saisons"
<? $x = 7.5 ; $type =gettype($x); echo "\$x = $x , de type $type <BR>"; settype($x, "integer"); $type =gettype($x); echo "\$x = $x , de type $type"; ?> |
$x = 7.5 , de type double $x = 7 , de type integer |
Les tableaux sont de taille variable, et les éléments peuvent être de type différents Les valeurs sont des ensembles ordonnés et indicés , ou bien associées à une clé (tableau associatif) L'initialisation est permise avec le constructeur array, ou en donnant la suite des éléments
Les exemples suivants illustrent la souplesse des différentes façons de définir un tableau
|
<? $tab = array (10, 15, "trois"); echo "\$tab[1] vaut $tab[1]" ; $depart = array ("Paris" =>"75","Melun"=>"77","Bobigny"=>"93"); echo "Melun se trouve dans le $depart[\"Melun\"]"; $villes[0] = "Paris"; $villes[]="Rennes"; $villes[] = "Toulouse"; echo "Je me déplace de $villes[0] à $villes[2]" ; $nombre=count ( $villes ) ; echo "Le tableau \$villes possède <b>$nombre</b> éléments"; $semestre1 =array(1=>"Janvier","Février","Mars", "Avril","Mai","Juin"); echo "\$semestre1[3] = $semestre1[3] "; ?> |
$tab[1] vaut 15 Melun se trouve dans le 77 Je me déplace de Paris à Toulouse Le tableau $villes possède 3 éléments $semestre1[3] = Mars |
Parcours d'un tableau indicé
La construction suivante est standard dans le cas usuel d'un tableau dont le premier élément porte l'indice 0
(cette partie anticipe sur les structures itératives.
$nb= count($tab);
for ( $i=0; $i < $nb ; $i++)
echo $tab[$i] . "
";
Parcours d'un tableau associatif
Dans ce cas l'indice est remplacé par une chaine appelée la clé, à laquelle correspond la valeur de l'élément du tableau.
// déplace le pointeur au début du tableau
reset ($tab);
while ( list ($cle, $valeur) = each ( $tab )
echo "$cle ---> $valeur
";
Exemple : tableau $semestre
| Code PHP | Exécution |
|---|---|
3 parcours d'un tableau associatif<? $semestre = array(1=>"Janvier","Février","Mars", "Avril","Mai","Juin"); echo "Parcours du tableau \$semestre<BR>"; $nb= count($semestre); for ( $i=1; $i <= $nb ; $i++) echo "\$semestre[$i] = $semestre[$i] <BR>"; echo "Liste des mois du semestre<BR>"; foreach ( $semestre as $mois ) echo "$mois <BR>"; echo "Liste des associations (clé, valeur)<BR>"; reset ($semestre); while ( list ($cle, $valeur) = each ( $semestre) ) echo "$cle ---> $valeur <BR>"; ?> |
Parcours du tableau $semestre $semestre[1] = Janvier $semestre[2] = Février $semestre[3] = Mars $semestre[4] = Avril $semestre[5] = Mai $semestre[6] = Juin Liste des mois du semestre Janvier Février Mars Avril Mai Juin Liste des associations (clé, valeur) 1 ---> Janvier 2 ---> Février 3 ---> Mars 4 ---> Avril 5 ---> Mai 6 ---> Juin |
Autres fonctions tableaux
o key()
o current()
o next() et prev()
o sort() tri les éléments du tableau en les renumérotant à partir de 0
o asort() tri les éléments sans réaffecter les indices ou les clés
o rsort() et arsort() ont le même rôle en triant dans le sens décroissant.
o ksort() et krsort() tri suivant les valeurs (croissante ou décriossante) des clés
o explode() et implode
* Une expression est une construction du langage utilisant des variables, des littéraux et des opérateurs et qui est évaluable.
Toute expression peut être interprétée, suivant le contexte, comme une expression booléenne.
* Les opérateurs arithmétiques, d'affectation et d'incrémentation du C sont utilisables
$facto=1 ;
for ( $i=1 ; $i <= 10; $i++ )
$facto *= $i ;
* La concaténation de chaines est notée . comme en Perl.
Attention à ne pas la confondre avec le point décimal : echo "3"."5"; comme echo 3 . 5; affiche 35, à différencier de echo 3.5;
$ch = "Bonjour ";
$ch .= "tout le monde !" ;
* Les opérateurs de comparaison et logiques sont usuels. A noter que && et || peuvent être aussi notés and, or, et que xor est le ou exclusif
* Attention à l'erreur classique héritée du C (évitée en Java)
$a=3; $b=4 ;
// comparaison correcte, sa valeur est bien FALSE
if ($a == $ba) echo "vrai"; else echo "faux";
// comparaison incorrecte, c'est une affectation dont la valeur est TRUE (et $a vaut 4) !
if ($a = $ba) echo "vrai"; else echo "faux";
Quelques fonctions utiles : explode
Exercice
Ecrire une fonction qui contrôle la vraisemblance d'une adresse IP passée en paramètre et renvoie en conséquence vrai ou faux.
Conditionnelles
* Structure if
o Syntaxes
if (condition) { bloc1; }
else {bloc2; }
if (condition1) { bloc1; }
elseif (condition2) { bloc2; }
elseif (condition3) { bloc3; }
else { bloc4;}
o Les accolades sont facultatives si le bloc est réduit à une seule instruction.
o Exemple
<?php $a = 10; $b = 11; echo "\$a = $a, \$b = $b |
$a = 10, $b = 11 $a est inférieur à $b. |
Voici un exemple d'utilisation significatif, qui fait aussi intervenir des fonctions date()
<?
$nom_jour = date("l");
$num_mois = date("m");
$jour = date("j");
$annee = date (" Y");
switch ($num_mois) {
case 1 : $mois ="Janvier";break;
case 2 : $mois ="Février";break;
case 3 : $mois ="Mars";break;
case 4 : $mois ="Avril";break;
case 5 : $mois ="Mai";break;
case 6 : $mois ="Juin";break;
case 7 : $mois ="Juillet";break;
case 8 : $mois ="Août";break;
case 9 : $mois ="Septembre";break;
case 10: $mois ="Octobre";break;
case 11: $mois ="Novembre";break;
case 12: $mois ="Décembre";break;
}
echo "Date et heure : <BR> ";
echo "$jour $mois $annee ", date("H : i");
?>
|
Date et heure : 20 Janvier 2004 11 : 54 |
while (condition) {
// bloc d'instructions
}
do {
// bloc d'instructions
} while (condition);
for($i=0; $i <=$max ; $i++) {
// bloc d'instructions
}
foreach ($tab as $el) {
// instructions portant sur $el, élément du tableau
}
Construction
while (list(var1, $var2 ..) = each($liste)) {
// bloc d'instructions
}
# Syntaxe
function nomfonction (liste-paramètres) {
....
[return $var]
}
# Ici, le nom de la fonction n'est pas sensible à la casse.
Ces fonctions sont semblables aux fonctions JavaScript. Il peut n'y avoir qu'une valeur de retour après return, qui peut être un tableau.
# Exemple
| Code PHP | Exécution |
|---|---|
<?
function table_mult ($n) {
for ($i=0; $i<=10; $i++)
$t[] = $i*$n;
return $t;
}
echo "Table de multiplication par 7 <P>";
$tab = table_mult (7);
for ($i=0; $i <=10; $i++)
echo "$i * 7 = " . $tab[$i] . "<BR>" ;
?>
|
Table de multiplication par 70 * 7 = 01 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63 10 * 7 = 70 |
Les paramètres formels doivent être précisés (il n'existe pas de paramètres systèmes implicites comme en Perl), et le mode de passage s'effectue
normalement par valeur (voir précisions).
On peut donner des valeurs par défaut aux paramètres formels, au cas où le programme appelant ne fixerait pas leurs valeurs.
Attention : ces valeurs par défaut doivent être des constantes. D'autre part si la liste des paramètres effectifs passés à l'appel de la fonction
est incomplète, les affectations de valeurs aux paramètres formels s'effectuent dans l'ordre. On a alors intérêt à placer à la fin
les paramètres qui bénéficient ainsi d'une initialisation.
Par exemple :
| Code PHP | Exécution |
|---|---|
<?
function somme ($a = 1, $b = 2) {
return $a + $b;
}
echo "somme(3, 5) = ", somme (3,5), "<BR>" ;
echo "somme(3) = ", somme (3), "<BR>" ;
echo "somme() = ", somme (), "<BR>" ;
?>
|
somme(3, 5) = 8 somme(3) = 5 somme() = 3 |
| Code PHP | Exécution |
|---|---|
<?
function somme ($a = 1, $b = 2) {
return $a + $b;
}
echo "somme(3, 5) = ", somme (3,5), "<BR>" ;
echo "somme(3) = ", somme (3), "<BR>" ;
echo "somme() = ", somme (), "<BR>" ;
?>
|
somme(3, 5) = 8 somme(3) = 5 somme() = 3 |