Programmation PHP/Variables

Un livre de Wikilivres.
Aller à : navigation, rechercher


Définition[modifier | modifier le wikicode]

En PHP, les variables sont représentées par un signe dollar "$" suivi du nom de la variable, ou d'un underscore "_" pour les constantes (un warning apparait quand ces dernières sont redéfinies).

Le nom est sensible à la casse (par exemple $MaVariable est différent de $mavariable). Dans tous les cas, les variables doivent commencer par une lettre (a-z, A-Z) :

     $1MaVariable // incorrect
     $MaVariable  // correct
     $_MaVariable // correct
     $àéè         // correct
     _MaVariable  // correct

Exemple[modifier | modifier le wikicode]

  <?php
  // Initialisation des variables
  $Prenom = 'Romuald';
  $Age    = '23 ans';
  $Profession = 'informaticien';

  // Affichage
   echo 'Bonjour ' . $Prenom . ', tu as ' . $Age . ' et ta profession est ' . $Profession . '.';
  // Ce qui affichera sur votre navigateur : Bonjour Romuald, tu as 23 ans et ta profession est informaticien.

  // Une autre manière de faire
  echo "Bonjour $Prenom, tu as $Age et ta profession est $Profession";
  // Ce qui affichera sur votre navigateur : Bonjour Romuald, tu as 23 ans et ta profession est informaticien.

  // Subtilité des " et des '
  echo 'Bonjour $Prenom, tu as $Age et ta profession est $Profession';
  // Ce qui affichera sur votre navigateur : Bonjour $Prenom, tu as $Age et ta profession est $Profession
  // Le contenu d'une chaîne construite avec des " sera interprété par PHP et les variables
  // éventuellement utilisées seront remplacées par leurs valeurs.
  ?>

Nota bene : une variable accolée à du texte est précédée d'un point. Ce dernier sert à la concaténation et dans le cas présent est surtout utile pour indiquer à l'interpréteur que l'on passe du texte, puis à une variable. On lui évite ainsi un temps de réflexion qu'il aurait si l'on avait écrit :

echo "Bonjour $Prenom, tu as $Age et ta profession est $Profession";
  • Pour citer du texte contenant uniquement des apostrophes ou des guillemets, on peut encadrer les uns par les autres :
echo 'Hello "World"!';
  • Pour citer du texte contenant les deux symboles, on peut utiliser le caractère d'échappement "\" :
echo 'Hello \'the\' "World" !';
  • Sinon il existe aussi la syntaxe Heredoc avec l'opérateur "<<<"[1] :
echo <<<Test
 'Hello' "World"!
Test;

Rappel : le caractère ";" indique qu'il s'agit d'une fin de commande, sans celui-ci l'interpréteur PHP ne comprend pas quand se trouve la fin d'une instruction. Le "<?php" et "?>" indique respectivement qu'il s'agit d'un début de code en PHP et de sa fin.

Types de variables[modifier | modifier le wikicode]

Contrairement à de nombreux langages de programmation, en PHP il ne faut pas prédéclarer une variable mais celle-ci est typée lors de son instanciation.

$x=1 indique que $x est un entier
$mot='test' indique que $mot est une chaîne

En PHP il y a donc 4 types de variables scalaires

  • entiers (integer) : nombres naturels sans décimale (sans virgule)
  • réels (float) : nombres décimaux (on parle généralement de type double, car il s'agit de nombre décimaux à double précision)
  • chaînes de caractères (string) : ensembles de caractères
  • booléens (boolean) : true ou false où true = vrai et false = faux en français
  • tableaux (array) : listes d'éléments ordonnés.

Fonctions usuelles sur les chaines[modifier | modifier le wikicode]

  • print() (alias echo) : affiche le contenu de la variable placée en paramètre.
  • printf() et dérivés (ex : sprintf) : print formaté, affiche un texte dont on remplace les marqueurs, numérotables, par les variables en paramètre[2]. Exemple :
printf('Compteur : %s. ', 1);                     // Compteur : 1.
printf('Compteur : %s. ', 2);                     // Compteur : 2. 

printf('Compteur : %s, taille : %s. ', 3, 1);     // Compteur : 3, taille : 1.
printf('Compteur : %2$s, taille : %1$d. ', 1, 4); // Compteur : 4, taille : 1.
  • trim() : supprimer les espaces et retours chariots en début et fin de chaine.
  • strip_tags() : supprime les balises HTML mentionnées en paramètre.
  • ucfirst() : met une majuscule en début de chaine.
  • lcfirst() : met une minuscule en début de chaine.
  • strtoupper() : met en lettres capitales toute la chaine.
  • strtolower() : met en bas de casse toute la chaine.
  • str_pad() : complète une chaine avec un caractère pour qu'elle atteigne la taille demandée si ce n'était pas le cas.

Variables dynamiques[modifier | modifier le wikicode]

Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de variable qui est affecté et utilisé dynamiquement. La valeur MaVariable est affectée à une variable classique appelée a avec l'instruction suivante :

 <?php
   $a="MaVariable";
 ?>

Une variable dynamique, ou variable variable, utilise le nom d'une autre variable. Dans l'exemple ci-dessous, la valeur bonjour est affectée à la variable dynamique $$a, c'est-à-dire à une variable dont le nom est la valeur $a de la variable a. La variable classique a contient la valeur MaVariable donc le code :

 <?php
   $$a="bonjour";
 ?>

est équivalent à : $MaVariable="bonjour";

Autres variables[modifier | modifier le wikicode]

Les variables présentées dans ce paragraphe sont des tableaux indicés par le nom de la valeur accédée (une chaîne de caractère).

Variables d'environnement[modifier | modifier le wikicode]

Accessibles par $_ENV, cette variable est une 'superglobale', ou globale automatique. Cela signifie qu'elle est simplement disponible dans tous les contextes d'exécution (fonctions ou méthodes).

Variables globales[modifier | modifier le wikicode]

$_GLOBAL est une superglobale, l'enregistrement dans cette variable permet de récupérer la valeur n'importe quand.

Variables de sessions[modifier | modifier le wikicode]

Pour plus de détails voir : Programmation PHP/Sessions.

Lors de la création d'une session (session_start()), il est possible d'enregistrer des variables (par session_register('nom_variable') = $variable ). On peut aussi utiliser le tableau $_SESSION pour créer et modifier une variable de session (par exemple : $_SESSION['ma_variable'] = 3; )

Il est également possible de supprimer les sessions courantes dans le code PHP en utilisant la fonction session_destroy(). La destruction de la session en cours peut aussi se faire par la fermeture du navigateur.

Pour supprimer une variable de session sans supprimer la session entière, il suffit d'utiliser la fonction unset($_SESSION['ma_variable']).

Variables de cookie[modifier | modifier le wikicode]

Pour plus de détails voir : Programmation PHP/Cookies.

Le tableau $_COOKIE permet de gérer les cookies (définis avec setcookie()[3]). Ces cookies sont d'une très grande importance mais sont limités à 20 dans la configuration par défaut de PHP.

link={{{link}}}Attention !

Ne pas mettre d'informations privées (mots de passe du serveur...) dans ces variables car elles sont stockées dans un fichier non protégé, sur le disque dur de l'utilisateur.

Variables de requêtes[modifier | modifier le wikicode]

$_REQUEST est un tableau associatif constitué du contenu des variables $_GET, $_POST, $_COOKIE.

Variables de fichiers[modifier | modifier le wikicode]

Pour plus de détails voir : Programmation PHP/Fichiers.

Lors d'un téléchargement de fichiers vers le serveur, une variable est assignée aux données de ce fichier. Il s'agit de $_FILES. Elle permet de récupérer le nom du fichier envoyé (exemple : mon_image.png), le nom du fichier temporaire où PHP a copié les données et où il est donc possible de les lire (exemple: C:\temp\T0001AF7.tmp).

Exemple :

 $_FILES['nom_fichier']

Variables mixtes[modifier | modifier le wikicode]

Le mot clé mixed permet de définir une variable mixte.

Variables de serveurs[modifier | modifier le wikicode]

$_SERVER permet d'obtenir des renseignements sous forme d'un tableau sur le serveur.

'PHP_SELF'
Le nom du fichier du script en cours d'exécution, par rapport à la racine web. Par exemple, $_SERVER['PHP_SELF'] dans le script situé à l'adresse http://www.monsite.com/test.php/foo.bar sera /test.php/foo.bar. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier courant.
'argv'
Tableau des arguments passées au script. Lorsque le script est appelé en ligne de commande, cela donne accès aux arguments, comme en langage C. Lorsque le script est appelé avec la méthode GET, ce tableau contiendra la chaîne de requête.
'argc'
Contient le nombre de paramètres de la ligne de commande passés au script (si le script fonctionne en ligne de commande).
'GATEWAY_INTERFACE'
Numéro de révision de l'interface CGI du serveur : i.e. ' CGI/1.1 '.
'SERVER_NAME'
Le nom du serveur hôte qui exécute le script suivant. Si le script est exécuté sur un hôte virtuel, ce sera la valeur définie pour cet hôte virtuel.
'SERVER_SOFTWARE'
Chaîne d'identification du serveur, qui est donnée dans les en-têtes lors de la réponse aux requêtes.
'SERVER_PROTOCOL'
Nom et révision du protocole de communication : i.e. ' HTTP/1.0 ';
'REQUEST_METHOD'
Méthode de requête utilisée pour accéder à la page; i.e. ' GET ', ' HEAD ', ' POST ', ' PUT '.
'REQUEST_TIME'
Le temps Unix depuis le début de la requête. Disponible depuis PHP 5.1.0.
'QUERY_STRING'
La chaîne de requête, si elle existe, qui est utilisée pour accéder à la page.
'DOCUMENT_ROOT'
La racine sous laquelle le script courant est exécuté, comme défini dans la configuration du serveur.
'HTTP_ACCEPT'
Contenu de l'en-tête Accept: de la requête courante, s'il y en a une.
'HTTP_ACCEPT_CHARSET'
Contenu de l'en-tête Accept-Charset: de la requête courante, si elle existe. Par exemple : ' iso-8859-1,*,utf-8 '.
'HTTP_ACCEPT_ENCODING'
Contenu de l'en-tête Accept-Encoding: de la requête courante, si elle existe. Par exemple : ' gzip '.
'HTTP_ACCEPT_LANGUAGE'
Contenu de l'en-tête Accept-Language: de la requête courante, si elle existe. Par exemple : ' fr '.
'HTTP_CONNECTION'
Contenu de l'en-tête Connection: de la requête courante, si elle existe. Par exemple : ' Keep-Alive '.
'HTTP_HOST'
Contenu de l'en-tête Host: de la requête courante, si elle existe.
'HTTP_REFERER'
L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateur permettent même de modifier la valeur de HTTP_REFERER sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.
'HTTP_USER_AGENT'
Contenu de l'en-tête User_Agent: de la requête courante, si elle existe. C'est une chaîne qui décrit le client HTML utilisé pour voir la page courante. Par exemple : Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre autres choses, vous pouvez utiliser cette valeur avec get_browser pour optimiser votre page en fonction des capacités du client.
'HTTP_header'
Valeur de l'en-tête HTTP correspondant envoyé dans la requête du client.
'HTTPS'
Définissez à une valeur non-vide si le script nécessite d'utiliser le protocole HTTPS.
'REMOTE_ADDR'
L'adresse IP du client qui demande la page courante.
'REMOTE_HOST'
Le nom de l'hôte qui lit le script courant. La résolution DNS inverse est basée sur la valeur de REMOTE_ADDR
'REMOTE_PORT'
Le port utilisé par la machine cliente pour communiquer avec le serveur web.
'SCRIPT_FILENAME'
Le chemin absolu vers le fichier contenant le script en cours d'exécution.
'SERVER_ADMIN'
La valeur donnée à la directive SERVER_ADMIN (pour Apache), dans le fichier de configuration. Si le script est exécuté par un hôte virtuel, ce sera la valeur définie par l'hôte virtuel.
'SERVER_PORT'
Le port de la machine serveur utilisé pour les communications. Par défaut, c'est '80'. En utilisant SSL, par exemple, il sera remplacé par le numéro de port HTTP sécurisé.
'SERVER_SIGNATURE'
Chaîne contenant le numéro de version du serveur et le nom d'hôte virtuel, qui sont ajoutés aux pages générées par le serveur, si cette option est activée.
'PATH_TRANSLATED'
Chemin dans le système de fichier (pas le document-root) jusqu'au script courant, une fois que le serveur a fait une traduction chemin virtuel -> réel.
'SCRIPT_NAME'
Contient le nom du script courant. Cela sert lorsque les pages doivent s'appeler elles-mêmes. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier (i.e. inclut) courant.
'REQUEST_URI'
L'URI qui a été fourni pour accéder à cette page. Par exemple : ' /index.html '.
'PHP_AUTH_DIGEST'
Lorsque vous utilisez PHP avec Apache en tant que module faisant une identification HTTP Digest cette variable est définie dans l'en-tête 'Authorization' envoyé par le client (que vous devez donc utiliser pour réaliser la validation appropriée).
'PHP_AUTH_USER'
Lorsque vous utilisez PHP avec Apache ou IIS (ISAPI en PHP 5) en tant que module faisant une identification HTTP, cette variable est définie à l'utilisateur fourni par l'utilisateur.
'PHP_AUTH_PW'
Lorsque vous utilisez PHP avec Apache ou IIS (ISAPI en PHP 5) en tant que module faisant une identification HTTP, cette variable est définie au mot de passe fourni par l'utilisateur.
'AUTH_TYPE'
Lorsque vous utilisez PHP avec Apache en tant que module faisant une identification HTTP, cette variable est définie au type d'identification.

Détection du protocole[modifier | modifier le wikicode]

Pour déterminer si l'utilisateur se connecte en HTTP ou HTTPS à partir des superglobales :

  • $_SERVER['REQUEST_SCHEME'] semble la meilleure option, car renvoie "http" ou "https".
  • $_SERVER['SERVER_PORT'] renvoie 80 ou 443.
  • $_SERVER['HTTPS'] donne true en HTTPS ou null en HTTP (provoque un warning unset).
  • $_SERVER['SERVER_PROTOCOL'] ne convient pas du tout car renvoie "HTTP/1.1" dans les deux cas.
  • $_SERVER['HTTP_X_FORWARDED_PROTO'] et $_SERVER['HTTP_FRONT_END_HTTPS'] : à creuser...

Si ces variables renvoient les caractéristiques HTTP en connexion HTTPS, c'est qu'il faut activer SSL pour le site.

Tester les types[modifier | modifier le wikicode]

Plusieurs fonctions permettent de déterminer les types des objets.

Soit une variable $v :

  • gettype($v) donne son type.
  • is_null($v) teste si un objet est null. Équivaut à "=== null"[4].
  • is_bool($v) est vrai si booléen.
  • is_numeric($v) est vrai si numérique.
  • is_int($v) est vrai si entier.
  • is_float($v) est vrai si décimal.
  • is_string($v) est vrai si chaine.
  • is_array($v) est vrai si tableau.
  • is_object($v) est vrai si objet.

Conversions[modifier | modifier le wikicode]

En PHP, il n'y a pas de déclaration de variable selon un type figé. Pour le forcer, il faut donc utiliser les méthodes suivantes.

Soit une variable $v, et $s un séparateur :

  • intval($v) ou (int) $v convertit en entier.
  • floatval($v) ou (float) $v convertit en flottant.
  • chr($v) convertit en caractère.
  • strval($v) ou (string) $v convertit un scalaire en chaine de caractères.
  • implode($s, $v) ou join($s, $v) transforme un tableau en chaine selon un séparateur donné.
  • explode($s, $v) convertit une chaine en tableau avec un séparateur donné entre les valeurs.

De plus, il est possible de réaliser un transtypage en préfixant la variable avec le type entre parenthèses. Exemple :

$a = 1;
$b = (bool) $a;
print gettype($a); // integer
print gettype($b); // boolean

Références[modifier | modifier le wikicode]

  1. http://fr2.php.net/manual/fr/language.types.string.php#language.types.string.syntax.heredoc
  2. http://php.net/manual/fr/function.sprintf.php
  3. http://www.php.net/manual/fr/function.setcookie.php
  4. http://php.net/manual/fr/function.is-null.php


Voir aussi[modifier | modifier le wikicode]