Chapitre suivantIndex des CoursChapitre précedentChapitre 4

Les variables

 

Portée des variables

La portée d'une variable dépend du contexte dans lequel la variable est définie. Pour la plupart des variables, la portée concerne la totalité d'un script PHP. Mais, lorsque vous définissez une fonction, la portée d'une variable définie dans cette fonction est locale à la fonction.

Par exemple:

$a = 1; /* portée globale */
Function Test () {
                 echo $a; /* portée locale */
                  }
Test (); 

Le script n'affichera rien à l'écran car la fonction echo utilise la variable local $a, et celle-ci n'a pas été assignée préalablement dans la fonction. Vous pouvez noter que ce concept diffère un petit peu du langage C dans lequel une variable globale est automatiquement accessible dans les fonctions, à moins d'être redéfinie localement dans la fonction. Cela peut poser des problèmes si vous redéfinissez des variables globales localement. En PHP, une variable globale doit être déclarée à l'intérieure de chaque fonction afin de pouvoir être utilisée dans cette fonction. Par example:

$a = 1;
$b = 2;
Function Sum () {
                global $a, $b;
                $b = $a + $b;
                }
Sum ();
echo $b; 

Le script ci-dessus va afficher la valeur "3". En déclarant global les variables $a et $b localement dans la fonction, toutes les références à ces variables concerneront les variables globales. Il n'y a aucune limite au nombre de variables globales qui peuvent être manipulées par une fonction.

Une deuxième méthode pour accéder aux variables globales est d'utiliser un tableau associatif prédéfini $GLOBALS. Le précédent exemple peut être réécrit de la manière suivante:

$a = 1;
$b = 2;
Function Sum () {
          $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
                }
Sum ();
echo $b; 

Le tableau $GLOBALS est un tableau associatif avec le nom des variables globales comme clef et les valeurs des éléments du tableau comme valeur des variables.

Une autre caractéristique importante de la portée des variables est la notion de variable static. Une variable statique a une portée locale uniquement mais elle ne perd pas sa valeur lorsque le script appelle la fonction. Prenons l'exemple suivant:

Function Test () {
$a = 0;
echo $a;
$a++;
} 

Cette fonction est un peu inutile car à chaque fois qu'elle est appelée, elle initialise $a à 0 et affiche "0". L'incrémentation de la variable ($a++) ne sert pas à grand chose car dès que la fonction est terminée la variable disparaît. Pour faire une fonction de comptage utile, c'est-à-dire qui ne perdra pas la trace du compteur, la variable $a est déclarée comme une variable static:

Function Test () {
static $a = 0;
echo $a;
$a++;
} 

Maintenant, à chaque fois que la fonction Test() est appelée elle affichera une valeur de $a incrémentée de 1.

Les variables static sont essentielles lorsque vous faites des appels récursifs à une fonction. Une fonction récursive est une fonction qui s'appelle elle-même. Il faut faire attention lorsque vous écrivez une fonction récursive car il est facile de faire une boucle infinie. Vous devez vérifier que vous avez bien une condition qui permet de terminer votre récursivité. La fonction suivante compte récursivement jusqu'à 10:

Function Test () {
                 static $count = 0;
                 $count++;
                 echo $count;
                 if ($count < 10) {
                                Test ();
                                  }
                 $count--;
                 }

Les variables dynamiques

Il est intéressant d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de variable qui affecté et utilisé dynamiquement. Une variable classique est affectée avec l'instruction suivante:

$a = "hello"; 

Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre variable. Dans l'exemple ci-dessous, hello, peut être utilisé comme le nom d'une variable en utilisant le "$$" précédent la variable. C'est-à-dire

$$a = "world"; 

A ce niveau, deux variables ont été définies et stockées dans l'arbre des symbol PHP: $a avec comme valeur "hello" et $hello avec comme valeur "world". Alors, l'instruction

echo "$a ${$a}"; 

Produira le même affichage que :

echo "$a $hello"; 

C'est-à-dire hello world.

Afin de pouvoir utiliser les variables dynamiques avec les tableau, vous avez a résoudre un problème ambigu. Si vous écrivez $$a[1], le parseur a besoin de savoir si vous parler de la variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe pour résoudre cette ambiguïté est la suivante: ${$a[1]} pour le premier cas, et ${$a}[1] pour le deuxième.

Les variables extérieures au PHP

Formulaire HTML (GET et POST)

Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables du formulaire seront automatiquement disponibles dans le script. Par exemple, considérons le formulaire suivant:

Exemple 4-1. Formulaire simple

<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form> 

Lorsque ce formulaire est envoyé, le PHP va créer la variable $name, qui contiendra la valeur que vous avez entré dans le champs Name: du formulaire.

Le PHP permet aussi l'utilisation des tableaux dans le contexte de formulaire, mais seulement des tableaux à une seule dimension. Comme cela, vous pouvez rassembler des variables ou utiliser cette fonctionnalité pour récupérer les valeurs d'un choix multiple :

Exemple 4-2. Exemple plus complexe de formulaire

<form action="array.php" method="post">
Name: <input type="text" name="personal[name]"><br>
Email : <input type="text" name="personal[email]"><br>
sexe: <br>
<select single name="sexe[]">
<option value="Homme">Homme
<option value="Femme">Femme
</select>
<input type="submit">
</form> 
  

Ce qui donne :

Name:
Email :
sexe:

 

Si l'option "track_vars" est activée, soit par l'option de compilation track_vars soit par la directive de configuration <?php_track_vars?>, les variables transmises par les méthodes POST et GET pourront aussi être trouvées dans le tableau associatif global $HTTP_POST_VARS ou $HTTP_GET_VARS suivant la méthode utlisée.

Bouton "submit" sous forme d'image

Lorsque vous envoyez le résultat d'un formulaire, vous pouvez utiliser une image au lieu du bouton "submit" standard en utilisant un tag :

<input type=image src="image.gif" name="sub">

Lorsqu'un utilisateur clique sur l'image, le formulaire sera transmis au serveur avec deux variables de plus, sub_x et sub_y. Ces deux variables contiennent les coordonnées de l'endroit où l'utilisateur à clické. Les utilisateurs expérimentés remarquerons que les noms de variables sont transmis avec une virgule à la place du caractère "_", mais le PHP fait la conversion automatiquement.

Les Cookies

Le PHP supporte les cookies HTTP de manière totalement transparente, comme défini dans les Spécifications Netscape . Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'authentification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction SetCookie() . Les cookies font partie intégrante du "header" HTTP, et donc la fonction SetCookie() doit être appelé avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction Header() . Tout cookie envoyé depuis le client sur le serveur sera automatiquement stocké sous forme de variable, comme pour la méthode POST ou GET.

Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie. Par exemple:

SetCookie ("MyCookie[]", "Testing", time()+3600);

Il est à noter qu'un cookie remplace le cookie précédent par un cookie de même nom tant que le "path" ou le domaine sont identiques. Donc, pour un "shopping cart", vous devez implémenter un compteur et l'incrémenter au fur et à mesure. C'est-à-dire:

Exemple 4-3. Exemple de la fonction SetCookie

$Count++;

SetCookie ("Count", $Count, time()+3600);

SetCookie ("Cart[$Count]", $item, time()+3600);

Variables d'environnement

Le PHP fait en sorte que les variables d'environnement soit accessible directement comme des variables PHP normales.

echo $HOME; /* Affiche la valeur de la variable d'environnement HOME, si celle-ci est affectée */

Même si le PHP crée les variables lors de l'utilisation des méthodes GET, POST et cookie, il est de temps en temps préférable de transmettre explicitement la valeur de la variable afin d'être sûre de la valeur. La fonction getenv() peut être utilisé pour récupéré la valeur des variables d'environnement. Vous pouvez aussi affecter une variable d'environnement grâce à la fonction putenv() .

Détermination du type des variables

Parce que le PHP détermine le type des variables et les converties (généralement) comme il faut, ce n'est pas toujours le type de variable que vous souhaitez. PHP inclus des fonctions permettant de déterminer le type d'une variable. Les fonctions gettype() , is_long() , is_double() , is_string() , is_array() , et is_object() permettent de déterminer si le type de variable correspond.

 

Chapitre précedentIndex des CoursChapitre suivant

Révisé le :23-Jan-2008| ©2008 www.technologuepro.com