Aller au contenu

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.

<?php
$nom = "Juste"; // string
$nom = 1980;    // int

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

Référence officielle >>

Possède 2 valeurs : true ou false.

<?php
$accepte = true; // assigne la valeur TRUE à $accepte

Les entiers

Référence officielle >>

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.

<?php
$largeur = 12;  // un entier
$arrêt  = -42;  // un entier

Les nombres à virgules flottantes

Référence officielle >>

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

Référence officielle >>

Contient les chaînes de caractères.

<?php
$nom = 'Leblanc';
$prenom="Juste";

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
<?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 :

<?php
echo "Retour à la ligne\n";

Avec les guillemets simples, les caractères spéciaux ne sont pas interprétés :

<?php
echo 'Retour à la ligne\n'; // Sortie littérale : Retour à la ligne\n

Les types composés

Les tableaux

Référence officielle >>

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.

<?php
$fruits = array("Pomme", "Banane", "Orange");
$info = ['nom' => 'Jean', 'prenom' => 'Paul'];

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

<?php
$age = NULL;

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:

declare(strict_types=1);

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 :

<?php

$var2 = (integer)$var1;
settype($var, "double");