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.

8 types de données dans PHP

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;
$x = -123456;

Virgule flottante

Valeurs possibles de 1.7E-308 à 1.7E+308

$x = 1.2345;
$x = -12345.78

Chaînes

N'importe quelles valeurs entourées par des guillemets doubles ou simples

$x = "françois piat";
$x = 'is the best';

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";
$x["nom"] = "piat";
$x[1] = 25;

Objets

Une classe est définie avec le mot-clé class et instanciée avec le mot-clé new.

class piat {
  function Qui () {
    echo "François.";
  }
}
$x = new piat;
$x->Qui();

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;
$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.

Gestion de la mémoire

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).

Exemple : variable définie ou non

Evaluation d'une variable

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 :