Le fait qu'on ne précise pas le type d'une variable lors de sa création ne veut pas dire qu'il n'y a pas de type de données dans PHP qui supporte huit types de données et offre de nombreuses fonctions permettant de connaître un type et/ou de le changer.
|
Type |
Remarque |
Exemple |
|
Booléen |
Valeurs possibles : TRUE FALSE |
$x = TRUE; |
|
Entier |
Valeurs possibles de -2 147 483 648 à +2 147 483 647 |
$x = 12; |
|
Virgule flottante |
Valeurs possibles de 1.7E-308 à 1.7E+308 |
$x = 1.2345; |
|
Chaînes |
N'importe quelles valeurs entourées par des guillemets doubles ou simples |
$x = "françois piat"; |
|
Tableaux |
Un tableau PHP est une association ordonnée : des clés correspondent à des valeurs. Les clés peuvent être numériques et/ou alphabétiques. Les valeurs peuvent être de n'importe quel type. |
$x[0] = "françois"; |
|
Objets |
Une classe est définie avec le mot-clé class et instanciée avec le mot-clé new. |
class piat { |
|
Ressource |
Une ressource est une référence sur l'extérieur (représentant par exemple un pointeur de fichier). |
$x = fopen("fic.txt", "r"); |
|
Null |
La valeur NULL représente une variable qui n'a pas de valeur. |
$x = NULL; |
Nous pouvons convertir une variable dans un certain type en utilisant la fonction settype().
Nous pouvons connaître le type d'une variable en utilisant de nombreuses fonctions.
Les valeurs booléennes TRUE et FALSE sont évaluées de la façon suivante :
Conclusion : les valeurs FALSE, 0, 0.0, '', '0', null, les tableaux vides et les objets vides sont considérées comme FALSE. Toutes les autres valeurs sont considérées comme TRUE.
PHP fournit les mots-clés TRUE et FALSE pour travailler avec les booléens. Ces mots-clés ne sont pas sensibles aux majuscules et aux minuscules (true, True marchent aussi). Même si TRUE et FALSE ont respectivement les valeurs 1 et chaîne vide, utilisez TOUJOURS les mots-clés pour tester les valeurs booléennes ou pour assigner une valeur booléenne.
PHP utilise le comptage de référence et la méthode "copy-on-write" pour gérer la mémoire. La méthode "copy-on-write" économise la mémoire en cas de copie de variables, et le comptage de référence permet de libérer la mémoire dès qu'une variable n'est plus utilisée.
La table des symboles
Une variable est composée de deux parties : son nom et sa valeur. La table des symboles est un tableau qui associe le nom d'une variable, et la position de sa valeur dans la mémoire (ie son adresse).
Quand on copie la valeur d'une variable dans une autre variable, PHP
n'alloue pas une nouvelle partie de la mémoire pour la copie de la
valeur. Il se contente de modifier la table des symboles en faisant
pointer les deux noms de variable sur le même espace mémoire.
Par exemple dans le code suivant :
$personnes
= array("Pierre","Paul","Jacques");
$prenoms = $personnes
;
Le tableau $personnes n'est
pas dupliqué dans la mémoire par l'instruction $prenoms
= $personnes.
C'est seulement si nous modifions
$prenoms ou $personnes :
$prenoms[0]
= "François";
que PHP alloueras de la mémoire et fera la
copie de la zone.
Chaque valeur pointée dans la table des symboles a un compteur de
référence, qui représente le nombre de variables permettant
d'accéder à cette valeur. Aprés l'assignement initial des variables
$personnes et $prenoms, la zone pointée en mémoire aura un compteur
de référence égale à deux. Quand la variable $prenom est modifiée,
une nouvelle zone est créée en mémoire, et le compteur de référence
des deux zones est passé à 1.
Quand une variable devient
hors de portée (sortie d'une fonction par exemple), le compteur de
référence de sa valeur est décrémenté de 1. Si la valeur du compteur
est égal à 0, alors la mémoire est libérée par PHP.
Si vous utilisez des variables avec des valeurs de grandes dimensions (chaînes de caractères très longues, tableaux avec de nombreuses entrées), vous pouvez aussi libérer implicitement de la mémoire (quand vous n'avez plus besoin de vos variables :-)) en utilisant la fonction unset(). La fonction isset() permet de savoir si une variable est définie (si une valeur lui est affectée).
L'évaluation d'une variable, générée par un script ou venant de la saisie d'un utilisateur est parfois plus difficile qu'on ne le pense.
Nous considérerons les différentes valeurs possibles suivantes :
- une chaîne de caractères 'abcd'
- une valeur numérique
1234
- une chaîne vide ''
- les entiers 1 et 0
- les valeurs booléennes TRUE et FALSE
- la valeur NULL
- une valeur non affectée.
Les valeurs saisies par un utilisateur dans un formulaire sont toujours
considérées comme des chaînes de caractères quand elles sont
récupérées par le script PHP au travers des tableaux $_POST ou $_GET.
Même si l'utilisateur saisi 0 (zéro), cette valeur sera traitée
comme une chaîne de caractères pour l'évaluation.
Un
tableau ou une variable texte venant d'un formulaire à travers des
cases à cocher ou des boutons radio pourra être indéfini (unset)
si l'utilisateur n'a pas coché les cases. Par contre une zone texte
(<input type="text"> ou <textarea>) ne sera jamais indéfinie.
Si l'utilisateur n'y saisit rien, la variable contiendra une chaîne
vide ('').
Les valeurs TRUE, FALSE et NULL ne peuvent pas
venir de la saisie d'un utilisateur.
La variables générées par un script peuvent prendre toutes les valeurs énoncées.
Nous utiliserons les opérateurs et fonctions suivantes pour tester la valeur des variables :
Le tableau suivant montre le résultat des évaluations des différentes valeurs avec les différentes méthodes :
| 'abcd' | 1234 | '' | 0 | 1 | FALSE | NULL | unset | |
| ! $var | faux | faux | vrai | vrai | faux | vrai | vrai | vrai |
| empty($var) | faux | faux | vrai | vrai | faux | vrai | vrai | vrai |
| $var == '' | faux | faux | vrai | vrai | faux | vrai | vrai | vrai |
| $var === '' | faux | faux | vrai | faux | faux | faux | faux | faux |
| isset($var) | vrai | vrai | vrai | vrai | vrai | vrai | faux | faux |
| strlen($var) == 0 | faux | faux | vrai | faux | faux | vrai | vrai | vrai |
| is_string($var) | vrai | faux | vrai | faux | faux | faux | faux | faux |
Le tableau montre des résultats parfois surprenants :
Quelques conclusions :