Types de Variables
Comme nous l'avons vu précédemment, PHP est un langage à typage dynamique.
L'interpréteur va typer les variables à la volée lors de l'exécution du code, suivant la valeur qu'elles contiennent.
Dans l'exemple suivant, $nom passe d'une chaîne de caractères à un entier sans erreur.
Cette pratique peut entraîner des erreurs silencieuses ou des comportements inattendus. Il est donc recommandé de conserver une cohérence dans l'usage des types pour une même variable.
Les types scalaires
Les booléens
Possède 2 valeurs : true ou false.
Les entiers
Contient tous les nombres entiers (c'est-à-dire sans virgule), qu'ils soient positifs ou négatifs. Les entiers peuvent être aussi des nombres binaires, hexadécimaux ou octaux.
Les nombres à virgules flottantes
Contient tous les nombres à virgule flottante (aussi connus comme "floats", "doubles", ou "nombres réels"), c'est-à-dire tous les nombres décimaux.
<?php
$largeur = 1.234;
$hauteur = 1.2e3;
$c = 7E-10;
$d = 1_234.567; // à partir de PHP 7.4.0 et équivalent à 1234.567 mais plus lisible
Les underscores ne sont qu'un outil visuel et ne modifient pas le comportement des nombres. Attention si vous copiez/collez du code d'une version antérieure à PHP 7.4 : les underscores ne seront pas reconnus et provoqueront des erreurs de syntaxe.
Rappel
7 : La mantisse (partie principale du nombre).
E : Indique que le nombre est écrit en notation scientifique. Cela signifie "multiplié par 10 à la puissance de".
-10 : L'exposant, qui indique la puissance de 10 par laquelle multiplier la mantisse
7×10 −10
Les chaînes de caractères
Contient les chaînes de caractères.
Une chaine litérale peut être spécifiée entre des guillemets doubles (" ") ou entre des guillemets simples (' '), mais leur comportement diffère légèrement.
Différences entre " " et ' '
-
Interpolation de variables :
-
La variable comprise dans une chaine de caractères entre "guillements doubles" est interprétée (remplacée par sa valeur) sauf si le $ est échappé (précédé de '\').
<?php
$nom = "Juste";
echo "$nom a 23 ans"; // Sortie : Juste a 23 ans
echo "\$nom a 23 ans"; // Sortie : $nom a 23 ans
La variable comprise dans une chaine de caractères entre 'guillemets simples' n'est pas interprétée. Le caractère d'échappement est le backslash.
<?php
$nom = "Juste";
echo '$nom a 23 ans'; // Sortie : $nom a 23 ans
echo 'L\'hirondelle est l\'animal favori de Juste';
-
Caractères spéciaux :
-
Avec les guillemets doubles, les caractères spéciaux comme \n, \t, etc., sont interprétés :
Avec les guillemets simples, les caractères spéciaux ne sont pas interprétés :
Les types composés
Les tableaux
Les tableaux sont des structures de données utilisées pour stocker plusieurs valeurs. Ils permettent d'associer des valeurs à des clés. Nous les verrons en detail dans le chapitre x.
Les objets
Les objets sont des instances de classes, qui peuvent contenir des propriétés et des méthodes.
<?php
class Personne {
public $nom;
public $age;
}
$personne = new Personne();
$personne->nom = "Juste";
$personne->age = 21;
Les types spéciaux
NULL
Le type NULL représente absence de valeur
resource
Le type resource désigne une référence à une ressource externe.
Typage des Variables
Depuis PHP 7, il est possible de typer les variables en utilisant des déclarations de type. Celles-ci peuvent être ajoutées aux arguments des fonctions, valeurs de retour, les propriétés de classe (PHP 7.4.0), les constantes de classe(PHP 8.3.0).
Exemple de Typage
Vous pouvez déclarer le type des arguments d'une fonction et le type de retour.
<?php
function additionner(int $a, int $b): int {
return $a + $b;
}
$resultat = additionner(5, 10); // $resultat sera de type int
Dans cet exemple, les arguments $a et $b doivent être des entiers, et
la fonction additionner retournera également un entier.
<?php
function additionner(int $a, int $b): int {
return $a + $b;
}
$resultat = additionner('5', 10);
echo $resultat // affichera 15
<?php
function additionner(int $a, int $b): int {
return $a + $b;
}
$resultat = additionner('a', 10);
echo $resultat
// Fatal error: Uncaught TypeError: additionner(): Argument #1 ($a) must be of type int,
<?php
function additionner(int $a, int $b): int {
return $a + $b;
}
$resultat = additionner('5', 10);
echo $resultat // affichera 15
Typage Strict
Pour renforcer le typage, vous pouvez activer le mode strict en ajoutant la déclaration suivante en haut de votre fichier PHP:
Cela obligera PHP à respecter strictement les types déclarés.
<?php
declare(strict_types=1);
function additionner(int $a, int $b): int {
return $a + $b;
}
$resultat = additionner('1', 10);
echo $resultat;
//Fatal error: Uncaught TypeError: additionner(): Argument #1 ($a) must be of type int
En mode strict, passer un type incorrect à une fonction provoquera une erreur de type.
Vérifier le type d'une variable
La fonction gettype retourne le type de la variable.
<?php
$variable = 42;
echo gettype($variable); // affiche "integer"
$variable = "Hello, World!";
echo gettype($variable); // affiche "string"
$variable = 3.14;
echo gettype($variable); // affiche "double"
$variable = true;
echo gettype($variable); // affiche "boolean"
$variable = null;
echo gettype($variable); // affiche "NULL"
Pour vérifier le type de la variable, vous pouvez utiliser les fonctions is_*
<?php
is_integer($var) // vrai si entier (int, byte ou short en Java)
is_double($var) // vrai si double (float, double ou long en Java)
is_string($var) //vrai si chaine de caractères (String, char en Java)
is_bool($var) //vrai si booléen (bool en Java)
is_null($var) //vrai si non affecté
is_array($var) //vrai si tableau
is_scalar($var) //vrai si scalaire (entier, double, chaine ou booléen)
is_numeric($var) //vrai si numérique (entier ou double ou chaine ne contenant qu'une valeur numérique)
Convertir
Pour modifier explicitement le type d'une variable, les deux syntaxes suivantes sont possibles :