• Aucun résultat trouvé

Détermination du type des variables

Dans le document Td corrigé Documentation PHP - Free pdf (Page 28-32)

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 7-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 accéssible directement comme des variables PHP nomrales.

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 8. Les constantes

Le PHP définit un certain nombre de constantes et propose des mécanismes pour en définir d'autres durant l'exécution. Les constantes sont comme des variables, à l'exception du fait que leur valeur est définie gâce à la fonction define(), et qu'elle ne peut pas être modifiée par la suite.

Les constantes prédéfinies (toujours disponibles) sont : __FILE__

Le nom du fichier qui est actuellement exécuté. Si cette constante est utilisée dans le cadre d'un fichier "inclus" (ou require), alors le nom du fichier inclus est renvoyé, et non le nom du fichier parent.

__LINE__

Le numéro de la ligne qui est actuellement exécutée. Si cette constantes est utilisée dans le cadre d'un fichier "inclus" (ou require) c'est la position dans le fichier inclus qui est renvoyé.

PHP_VERSION

La chaîne de caractères de présentation de la version du PHP qui est actuellement utilisée. Par exemple '3.0.8-dev'.

PHP_OS

Nom du Système d'exploitation qui est utilisé par la machine qui fait tourner le PHP. Par exemple, 'Linux'.

TRUE

La valeur TRUE.

FALSE

La valeur FALSE.

E_ERROR

Dénote une erreur autre qu'une "parsing error" qu'il n'est pas possible de corriger.

E_WARNING

Dénote un contexte dans lequel le PHP trouve que quelque chose ne va pas. Mais l'exécution se poursuit tout de même. Ces warnings là peuvent être récupérés par le script lui-même. Un exemple serait une regexp invalide dans la fonction ereg().

E_PARSE

Le parseur a rencontré une forme syntaxique invalide dans le script. Correction de l'erreur impossible.

E_NOTICE

Quelquechose s'est produit, qui peut être ou non une erreur. L'exécution continue. Par exemple, le cas d'ouverture de double quote (") non refermé, ou bien la tentative d'accéder à une variable qui n'est pas encore affectée.

Les constantes E_* sont généralement utilisées avec la fonction error_reporting().

Vous pouvez définir d'autres constantes en utilisant la fonction define().

Il est à noter que ce sont des constantes, et non pas des macros comme en C. Seulement les données scalaires peuvent être représentées par des constantes.

Exemple 8-1. Définition de constantes

<?php

define("CONSTANT", "Hello world.");

echo CONSTANT; // affiche "Hello world."

?>

Exemple 8-2. Utilisatin des constantes __FILE__ et __LINE__

<?php

function report_error($file, $line, $message) {

echo "Une erreur a eu lieu dans le fichier $file à la ligne $line:

$message.";

}

report_error(__FILE__,__LINE__, "Y a un problème");

?>

Chapitre 9. Les expressions

Les expressions sont la partie la plus importante du PHP. En PHP, presque tout ce que vous écrivez est une expression. La manière la plus simple de définir une expression est : "tout ce qui a une valeur".

Les formes les plus simples des expressions sont les constantes et les variables. Lorsque vous écrivez "$a = 5", vous assignez la valeur '5' à la variable $a. Bien évidemment, '5' vaut 5 ou, en d'autres mots, '5' est une expresssion avec pour valeur 5 (dans ce cas, '5' est un integer constant).

Après cette assignation, vous pouvez considérer que $a a pour valeur 5 et donc, si vous écrivez $b =$a, c'est comme si vous aviez écrit $b = 5. En d'autres mots, $a est une expression avec pour valeur 5. Si tout fonctionne correctement, c'est exactement ce qui arrive.

Un exemple plus complexe concerne les fonctions. Par exemple, considérons la fonction suivante : function foo () {

return 5;

}

Considérant que vous êtes familier avec le concept de fonction, (si ce n'est pas le cas, jetez un oeil au chapitre concernant les fonctions), vous êtes d'accord que $c = foo() est équivalent à $c = 5, et vous avez tout à fait raison. Les fonctions sont des expressions qui ont la valeur de leur "return value". Si foo() renvoie 5, la valeur de l'expression 'foo()' est 5. Habituellement, les fonctions ne font pas que renvoyer une valeur mais réalisent des traitements.

Bien sur, les valeurs en PHP n'ont pas à être des valeurs numériques, et souvent, c'est le cas. PHP supporte 3 types de variable scalaire : les valeurs entières, les nombres à virgule flottante et les chaînes de caractères. (une variable scalaire est une variable que vous ne pouvez pas "casser" en morceau, au contraire des tableaux par exemple). PHP supporte aussi deux types "composite" : les tableaux et les objets. Chacun de ces types de variables peuvent être affectés ou renvoyés par une fonction.

Les utilisateurs de PHP/FI 2 ne sentiront aucun changement. Malgré tout, PHP va plus loin dans la gestion des expressions, comme le font d'autres langages. PHP est un langage orienté expression, dans le sens où presque tout est une expression.

Considérons l'exemple dont nous avons déjà parlé, '$a = 5'. Il est facile de voir que il y a deux valeurs qui entrent en jeux ici, la valeur numérique constante '5' et la valeur de la variable $a qui est mis à jour à la valeur 5. Mais, la vérité est qu'il y a une autre valeur qui entre en jeux ici et c'est la valeur de l'assignement elle-même. L'assignement lui-même est assigné à une valeur, dans ce cas-là 5. En pratique, cela signifie que '$a = 5' est une expression qui a pour valeur 5. Donc, en écrivant quelquechose comme '$b

= ($a = 5)' revient à écire '$a = 5; $b = 5;' (un point virgule marque la fin d'une instruction). Comme les assignements sont parsés de droite à gauche, vous pouvez aussi écrire '$b = $a =5'.

Un autre bon exemple du langage orienté expression est la pré ou post incrémentation et la décémentation. Les utilisateurs de PHP/FI 2 et ceux de nombreux autres langages sont habitués à la notatoin "variable++" et "variable--". Ce sont les opérateurs d'incrémentation et de décrémentation. En PHP/FI 2, l'instruction '$a++' n'a aucune valeur (c'est-à-dire que ce n'est pas une expression) et vous ne pouvez donc pas l'utiliser. PHP ajoute les possibilités d'incrémentation et de décrémentation comme c'est le cas dans le langage C. En PHP, comme en C, il y a deux types d'opérateurs d'incrémentation (pré-incrémentation et

post-incrémentation). Les deux types d'opérateur d'incrémentation jouent le même rôle (c'est-à-dire qu'il incrémente la variable !!!). La différence vient de la valeur de l'opérateur d'incrémentation. L'opérateur de pré-incrémentation, qui s'écrit '++$variable', évalue la valeur incrémentée (PHP incrémente la variable avant de lire la valeur de cette variable, d'où le nom de 'pré-incrémentation').

L'opérateur de post-incrémentation, qui s'écrit '$variable++', évalue la valeur de la variable avant de l'incrémenter. (PHP incrémente la variable après avoir lu sa valeur, d'où le nom de 'post-incrémentation').

Un type d'expression très commun est l'expression de comparaison. Ces expressions sont évaluées à 0 ou 1, autrement dit FALSE ou TRUE (respectivement). PHP supporte les opérateurs de comparaison > (plus grand que), => (plus grand ou égal), == (égal à),

< (plus petit que), <= (plus petit ou égal). Ces expressions sont utilisées de manière courante dans les instructions conditionnelles, comme l'instruction IF.

Pour le dernier exemple d'expression, nous allons parler des combinaisons d'opérateurs/assignement. Vous savez que si vous voulez incrémenter la variable $a d'une unité, vous devez simplement écrire '$a++'. Mais si vous voulez ajouter la valeur '3' à votre variable ? Vous pouvez écrire plusieurs fois '$a++', mais ce n'est pas la meilleure des méthodes. Un pratique plus courante est d'écrire '$a = $a + 3'. L'expression '$a + 3' correspond à la valeur $a plus 3, et est de nouveau assignée à la variable $a. Donc le résultat est l'incrémentation de 3 unités. En PHP, comme dans de nombreux autres langages comme le C, vous pouvez écrire cela de manière plus concise, ce qui avec le temps sera de toutes façons plus claire et plus rapide à comprendre. Ajouter 3 à la valeur de la variable $a peut s'écrire '$a += 3'. Cela signifie précisement : "on prend la valeur de la variable $a, on ajoute la valeur 3 et on assigne cette valeur à la variable $a". Et pour être plus concis et plus clair, cette expression est plus rapide. La valeur de

l'expression '$a += 3', comme l'assignement d'une valeur quelconque, est la valeur assignée. Il est à noter que ce n'est pas 3 mais la combinaison de la valeur de la variable $a plus la valeur 3. (c'est la valeur qui est assignée à la variable $a). N'importe quel opérateur binaire peu utiliser ce type d'assignement, par exemple '$a -= 5' (soustraction de 5 de la valeur de la variable $a), '$b *=

7' (multiplication de la valeur de la variable $b par 7).

Il y a une autre expression qui peut paraître complexe si vous ne l'avez pas vu dans d'autre langage, l'opérateur conditionnel ternaire.

$premier ? $deuxième : $troisième

Si la valeur de la première sous-expression est vraie, (différente de 0), alors la deuxième sous-expression est évaluée et constitue le résultat de l'expression conditonnelle. Sinon, c'est la troisème sous-expression qui est évaluée et qui constitue le résultat de l'expression.

Les exemples suivants devrait vous permettre de mieux comprendre la pré- et post-incrémentation et le concept des expressions en générale:

function double($i) { return $i*2;

}

$b = $a = 5; /* assigne la valeur 5 aux variables $a et $b */

$c = $a++; /* post-incrémentation de la variable $a et assignation de la valeur à la variable $c */

$e = $d = ++$b; /* Pré-incrémentation, et assignation de la valeur aux variables $d et $e */

/* à ce niveau, les variables $d et $e sont égales à 6 */

$f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12), puis incrémentation de la valeur de $d */

$g = double(++$e); /* assignation du double de la valeur de $e APRES l'incrémentation de la variable $e à la variable $g ($g vaut 14) */

$h = $g += 10; /* Tout d'abord, $g est incrémentée de 10, et donc $g vaut 24.

Ensuite, la valeur de $g, (24) est assigné à la variable $h, qui vaut donc elle aussi 24. */

Au début de ce chapitre, nous avons dit que nous allions décrire les différents types d'instructions, et donc, comme promis, nous allons voir que les expressions peuvent être des instructions. Mais, attention, toutes les expressions ne sont pas des instructions.

Dans ce cas-là, une instruction est de la forme 'expr' ';', c'est-à-dire, une expression suivie par un point virgule. Si vous écrivez '$b

= $a = 5;', '$a = 5' est une expression valide, mais ce n'est pas une instruction en elle-même. '$b = $a = 5' est une instruction valide.

La dernière chose qui mérite d'être mentionnée est la véritable valeur des expressions. Lorsque vous faites des test sur une variable, dans une boucle conditionnelle par exemple, cela ne vous intéresse pas de savoir qu'elle est la valeur exacte de l'expression. Mais vous voulez seulement savoir si le résultat signifie TRUE ou FALSE (Le PHP n'a pas de type booléen). La véritable valeur d'une expression en PHP est calculée de la même manière qu'en Perl. Toute valeur numérique différente de 0 est considérée comme étant TRUE. Une chaîne de caractères vide et la chaîne de caractère 0 sont considérées comme FALSE. Toutes les autres valeurs sont vraies. Avec les types de variables non-scalaires, (les tableaux et les objets), si ils ne contiennent aucun élément, ils renvoient FALSE, sinon, ils renvoient TRUE.

PHP propose une implémentation complète et détaillée des expressions. PHP documente toutes c'est expressions dans le manuel que vous êtes en train de lire. Les exemples qui vont suivre devrait vous donner une bonne idée de ce qu'est une expression et comment construire vos propres expressions. Dans tout ce qui va suivre, nous écrirons expr pour indiquer tout expression PHP valide.

Chapitre 10. Les opérateurs

Dans le document Td corrigé Documentation PHP - Free pdf (Page 28-32)