Les variables de base
Tout comme PERL, le type de la variable dépend de ce que vous mettez dedans et de ce que vous en faites. Par contre vous pouvez forcer le type d'une variable ou modifier ce type si nécessaire.
Le caractère qui précède toutes les variables php est le dollar : $.
$variable = "chaine";
$variable = 3;
Les variables dynamiques
Vous pouvez créer des variables dynamiques, le nom de la variable est lui même une variable. La notation est le double dollar : $$.
$variable = "etudiant";
$$variable = "pat";
L'évaluation de la variable $etudiant donnera la valeur pat.
Cette possibilité permet ainsi de créer des variables dont le nom se modifie grâce au programme que vous faites: etudiant0, etudiant1 ...
Pour l'affichage vous pouvez par exemple utiliser la syntaxe :
print $$variable;
ou
print "La valeur de $variable est : ${$variable}";
Exemple d'une page utilisant des variables dynamiques
1 <HTML>
2 <BODY BGCOLOR=#FFFFFF>
3 <B>
4 <U>Petit script pour l'affichage de variable dynamique</U>
5 <BR><BR>
6 <FONT COLOR="green">
7 <?php
8 $variable = "etudiant";
9 $$variable = "pat";
10 print "Syntaxe 1 : La valeur de $variable est : ".$$variable;
11 ?>
12 <BR>
13 <?php
14 print "Syntaxe 2 : La valeur de $variable est : ${$variable}";
15 ?>
16 </FONT>
17 <BR><BR>
18 Fin de l'affichage
19 </BODY>
20 </HTML>
Explications
- De la ligne 1 à la ligne 6 le code est du code HTML simple.
- La ligne 7 permet d'insérer du code PHP
- La ligne 8 est une affectation de la valeur etudiant dans la variable variable
- La ligne 9 introduit une variable dynamique $$variable qui est équivalent à $etudiant
- La ligne 10 et la ligne 14 propose deux méthodes pour l'affichage du contenu de la variable dynamique.
Vous obtiendrez le résultat suivant sur votre navigateur client:
Si vous regardez le source via votre navigateur vous obtenez:
Utilisation des références dans les variables
Vous pouvez travailler sur les références (pointeur) comme en C par exemple. Ceci vous permettra par exemple de conserver la persistence d'un valeur à l'intérieur de variables et de la modifier quelque soit sa position dans le programme.
Vous devez préfixer votre variable par le caractère : &
$pointeur = &$variable;
La variable pointeur ne représentera pas le contenu mais la référence qui pointe sur la valeur de la variable variable (la zone mémoire où elle est stockée).
Si la valeur de la variable est modifiée et ceci quelque soit l'endroit où elle se situe dans la programme, la valeur de la variable pointeur le sera aussi.
Exemple
1 <HTML>
2 <BODY BGCOLOR=#FFFFFF>
3 <B>
4 <U>Travail sur les références des variables</U>
5 <BR><BR>
6 <FONT COLOR="green">
7 <?php
8 $variable = "pat";
9 $pointeur=&$variable;
10 print "Etape 1 : \$pointeur pointe sur la valeur ->$pointeur";
11 ?>
12 <BR>
13 <?php
14 print "Je modifie la valeur de la variable \$variable<BR>\n";
15 $variable="ibulaire";
16 print "Etape 2 : ".'$pointeur'." pointe sur la valeur ->$pointeur\n";
17 ?>
18 </FONT>
19 <BR><BR>
20 Fin de l'affichage
21 </BODY>
22 </HTML>
Explications
- De la ligne 1 à la ligne 6 le code est du code HTML simple.
- La ligne 7 permet d'insérer du code PHP
- La ligne 8 est une affectation de la valeur pat dans la variable $variable
- La ligne 9 permet de ranger dans la variable $pointeur non pas la valeur de la variable $variable mais la référence mémoire de cette variable grâce à l'utilisation du caractère &
- La ligne 10 permet d'afficher le contenu de la variable $pointeur. Notez que pour permettre d'afficher à l'écran $pointeur et non la valeur de cette variable je désactive le caractère spécial $ au moyen du caractère \. Même chose à la ligne 14. La ligne 16 montre un autre moyen d'obtenir le même résultat grâce à l'utilisation des caractères ' et le caractère de cancaténation . . J'insére dans le print un retour chariot à la fin de la ligne (\n) simplement pour que le source soit mieux présenté.
- La ligne 15 modifie la valeur de la variable $variable.
- La ligne 16 permet de se rendre compte que malgré le fait que nous n'intervenons pas directement sur la variable $pointeur, celle ci voit sa valeur modifiée, c'est « l'effet pointeur ».
Vous obtiendrez le résultat suivant sur votre navigateur client :
Si vous n'aviez pas affecté à la variable $pointeur la référence vous auriez alors obtenu le résultat suivant :
modification de la ligne 10 en :
10 $pointeur=$variable;
Quelques fonctions de traitement des chaînes
- strlen
Cette fonction va permettre de trouver le nombre de caractères contenus dans une chaîne simple.
$nbcar=strlen($variable);
- strstr
Renvoie VRAI si la sous chaîne existe dans la chaîne. Attention : pour la fonction strstr la casse est importante.
strstr($chaine,$souchaine);
- substr
Permet de récupérer une partie de la chaîne en indiquant l'index du caractère à partir duquel la recherche se fait. Vous pouvez aussi indiquer le nombre de caractère à récupérer. Si l'index est négatif, la recherche se fait depuis la fin de la chaîne.
$recup=substr($variable,$index,$longueur);
- strtok
Permet de récupérer les éléments séparés par un ou des délimiteurs. Attention, le délimiteur n'apparaît pas dans la chaîne récupérée.
Lorsque vous utilisez cette fonction, la chaîne de départ est stockée en mémoire, ce qui permet ensuite de pouvoir relancer strtok sans nécessité d'indiquer le nom de la variable où se passe la recherche. Ce qui est pratique sinon vous referiez la recherche toujours sur la même partie et obtiendriez toujours le même résultat à savoir la première occurrence trouvée. Vous pouvez donc faire la recherche sur toute la chaîne en utilisant une boucle while.
$recup=strtok($variable,$delimiteur);
ou
$recup=strtok($delimiteur);
- explode
Cette fonction renvoie dans une tableau, les valeurs comprises entre un séparateur que vous indiquez en argument. A la différence de strtok, même si vous indiquez plusieurs caractères comme délimiteurs, celui-ci ne sera vu que comme un seul.
$liste=explode($delimiteur,$variable);
- implode
Cette fonction a l'effet inverse de explode. Elle permet à partir d'une liste de créer une variable simple. Les différents éléments de la liste seront « recollés » via ce séparateur.
$variable=implode($liste,$delemiteur);
- split
Cette fonction permet de séparer les éléments d'une variable simple en utilisant des expressions régulières (et, ou ...). Attention la casse de l'expression régulière est très importante (nombre de blancs dans le séparateur ...).
Le résultat est stocké dans une liste.
$liste=split("$delimiteur",$variable);
- trim, ltrim et chop
Ces trois fonctions permettent de supprimer à différents endroits d'une chaîne simple, les caractères « neutres » tels les espaces, tabulations, retour à la ligne ... Ces fonctions renvoient une chaîne « nettoyée ».
trim les supprime tous en début en et fin de chaîne.
ltrim les supprime tous en début de chaîne.
chop les supprime tous en fin de chaîne.
$variable=trim($variable);
$variable=ltrim($variable);
$variable=chop($variable);
- str_replace
Cette fonction remplace toutes les occurrences d'une chaîne par une autre.
$nettoie=str_replace($avant,$apres,$variable);
- strtoupper et strtolower
Ces fonctions permettent de transformer en majuscule ou minuscule tous les caractères contenus dans une chaîne.
$nouveau=strtoupper($variable);
$nouveau=strtolower($variable);
- ucwords
Cette fonction permet de mettre en majuscule, tous les premiers caractères de chaque mot contenu dans une chaîne simple.
$modif=ucwords($variable);
- addslashes et stripslashes
Addslashes permet de mettre un slashe devant les caractères apostrophe ('), double apostrophe (") et le slashe (\) lui-même.
Cette fonction peut être très utile lors de requête SQL. Ces caractères étant spécifiques, les décommenter devient important.
Stripslashes est la fonction inverse.
$modif=addslashes($variable);
$modif=stripslashes($variable);
Les variables composées
Les listes
Les listes sont des tableaux a deux dimensions. La première est un indice numérique entier et la deuxième la valeur associée à cet indice.
Une liste permet ainsi de stocker plus d'un valeur dans un même structure.
Imaginez un meuble constitué de rangements. Une colonne servira à indiquer l'ordre de rangement on appelle aussi cela une clé (ici les indices numériques) tandis que l'autre colonne servira à ranger les valeurs (un objet).
Vous pouvez accéder à un objet directement en indiquant le numéro de la case où il est rangé.
Pour définir une liste vous utiliserez le même caractère que pour une variable simple : $
L'affectation se fera de la façon suivante :
- Affectation complète de la liste
$liste=array("escargot de bourgogne","cagouille","manchot","bretagne","php4");
- Affectation d'une valeur à un indice
$liste[0] = escargot de bourgogne";
- Indiçage automatique
php4 permet de réaliser une incrémentation automatique des indices sans avoir à s'en soucier. Vous ajoutez une valeur qui sera affectée automatiquement au dernier indice + 1.
La syntaxe est la suivante : $liste[]="nouvelle valeur";
Pour la dernière syntaxe, nous n'indiquons pas de valeur à l'indice. Ce système peut être très utile dans les formulaires où vous donnerez comme nom de l'identifiant pour des boutons de type checkbox, des listes type select ... une liste auto incrémentée.
$liste=array("escargot de bourgogne","cagouille","manchot","bretagne","php4");
$liste[1] renverra la valeur cagouille
Attention les indices commencent à la valeur 0.
Vous pouvez utiliser la fonction
count qui vous renverra le nombre d'élément contenu dans la liste.
Les tableaux associatifs a deux dimensions
Ces tableaux, à la différence des listes, auront comme indice des chaînes de caractères. Ces indices se nomment des clés. Une clé est forcément associée à une valeur. Vous obtenez donc un couple.
Pour définir un tableau vous utiliserez le même caractère que pour une variable simple ou pour une liste : $
L'affectation se fera de la façon suivante :
$tableau=array(nom=>Jacquenod,prenom=>frederic,age=>"En evolution constante");
Si la clé ou la valeur n'est pas un simple mot ou comporte des caractères blancs ... n'oubliez pas les guillemets.
Affectation d'une valeur à un indice:
$tableau[adresse]="Paris 75";
Pour parcourir cette structure vous utiliserez la boucle
foreach (voir
boucles).
Il existe un tableau associatif prédéfini qui se nomme GLOBALS et qui contient les informations sur le script, son contenu (variables ...) et le serveur web.
D'autres tableaux associatifs existent comme HTTP_GET_VARS et HTTP_POST_VARS qui contiennent les paires nom-valeurs en fonction de la méthode de transmission utilisée dans le formulaire (get ou post). Ces deux tableaux peuvent être utiles lorsque vous ne savez pas quels sont les variables qui seront renvoyées par le formulaire.
Les tableaux associatifs multidimentionnels
Le tableau associatif HTTP_POST_VARS est un tableau particulier car multidimentionnel. Pour le moment nous n'avons vu que les tableaux à 2 dimensions.
Mais rien n'empêche d'associer un autre tableau à un élément du premier. Vous aurez un tableau de tableaux.
Imaginons un tableau contenant les informations sur chaque cours donné dans une université. Un cours est caractérisé par son intitulé, son professeur, la durée du cours, le lieu ...
Affectation complète du tableau associatif
$tableau=array(
array(intitule=>reseau,professeur=>"Jacquenod Frédéric",duree=>4,lieu=>paris),
array(intitule=>unix,professeur=>"Petit Jean",duree=>2,lieu=>jussieu),
array(intitule=>biologie,professeur=>"Mobby Dick",duree=>5,lieu=>sorbonne)
);
Chaque élément du tableau est lui-même un tableau. Chaque tableau est rangé dans une case du tableau global dont la référence est un indice numérique (nous avons plutôt à faire à une liste de tableau).
Le premier tableau est situé à l'indice 0 et ainsi de suite. Ceci du fait que nous n'avons spécifié aucune clé. Mais rien n'empêche d'en spécifier une.
$tableau=array(
cours1=>array(intitule=>reseau,professeur=>"Jacquenod Frédéric",duree=>4,lieu=>paris),
cours2=>array(intitule=>unix,professeur=>"Petit Jean",duree=>2,lieu=>jussieu),
cours3=>array(intitule=>biologie,professeur=>"Mobby Dick",duree=>5,lieu=>sorbonne)
);
Affectation d'une valeur à un indice
$tableau[0][duree]=5;
ou
$tableau[cours1][duree]=5;
Dans les deux cas on affecte la valeur 5 à la clé duree du premier tableau.
Travail sur le type de la variable
Par défaut, PHP ne réclame pas de typage des variables, c'est à dire la déclaration de leur type, cependant il est possible de "typer" et de connaître le type d'une variable Parfois cela pourrait pourtant être utile. Voici les fonctions qui le permettent.
gettype et settype
PHP4 permet grâce aux fonctions
gettype et
settype d'obtenir le type d'une variable ou de modifier ce type.
gettype($variable);
et
settype ($variable,string);
| Type renvoyé par gettype | Type de la donnée |
| Integer | entière |
| double | réelle |
| string | chaîne simple |
| array | liste ou tableau |
| object | Objet (pointeur) |
| class | classe |
| NULL | Type inconnu |
Tester le type de la variable
Vous pouvez utiliser des fonctions permettant de tester le type de la variable et elles renvoient VRAI (ou 1) si le type est le bon.
- is_int(), is_integer(), is_long() renverront VRAI si le type est entier
- is_double(), is_float(), is_real() renverront VRAI si le type est double (réel)
- is_string(), is_array(), is_object() renverront respectivement VRAI si le type est string, array ou object
Typage des variables
Vous pouvez aussi forcer le type de la valeur en utilisant les fonctions
intval(),
doubleval() et strval().
Exemple
1 <?
2 $variable = "3 petits cochons";
3 if(is_string($variable))
4 {
5 print "La variable est un : <FONT COLOR=green>".gettype($variable);
6 print "</FONT><Br>\n";
7 print "Je la transforme en un entier<Br>\n";
8 $trans = intval($variable);
9 print "La variable est un : <FONT COLOR=green>".gettype($trans);
10 print "</FONT><Br>\n";
11 print "Sa valeur est maintenant : <FONT COLOR=green>$trans</FONT>";
12 }
13 else
14 print "La variable est de type : <FONT COLOR=green>".gettype($variable);
15 ?>
Les constantes
Vous disposez aussi de la possibilité de créer des constantes qui auront donc la même valeur tout au long de votre programme. Ceci peut etre utile par exemple pour positionner une valeur de débugage DEBUG qui tracera les étapes du programme si elle vaut 1 et ne fera rien si elle vaut 0 :
define ("DEBUG",1);
Vous pouvez aussi vous en servir pour positionner un préfixe pour vos pages web que vous intégrerez dans vos liens hypertexte, vos références d'images ...
define("PRE","http://www.netalya.com");
On l'appelle ensuite comme ceci :
<php echo PRE ?>
Tests sur les variables
Vous avez à votre disposition les fonctions
isset,
unset et
empty qui vous permettent de tester la validité, l'existence d'un contenu ...
- isset permet de tester si la variable existe
if(isset($variable)){print "La variable est définie et contient une valeur";}
renverra VRAI si la variable contient une valeur
- unset libère la place mémoire réservée par la variable
unset($variable);
Une fois cette action réalisée, le test avec isset renvoie FAUX
- empty renvoie VRAI si la variable n'est pas définie ou si elle renvoie une valeur FAUSSE (valeur 0 ou chaîne vide)
if(empty($variable)){print "variable non définie ou contient 0 ou chaine vide";}
Nous vous informons que ce cours constitue une œuvre protégée en France
par le Code de la Propriété Intellectuelle, et à l’étranger par les
conventions internationales en vigueur sur le droit d’auteur. La
violation de l’un des droits d’auteur de l’œuvre est un délit de
contrefaçon.
Il est donc interdit, à titre privé ou public, de reproduire, copier,
vendre, revendre ou exploiter, que ce soit dans un but commercial ou
purement gratuit, ce cours, sauf accord exprès et préalable de son
auteur.