Glisser

PHP : variables et types (tout comprendre)

PHP : variables et types (partie 5)

Écrit par : Thibault Chazottes

Une variable, c’est $ puis un nom

Référence : Essentiel des variables.

<?php
$name = 'Thibault';
echo $name;

Trois règles à retenir :

  1. le $ devant le nom, toujours ;
  2. = pour associer une valeur ;
  3. le type n’est pas déclaré sur la variable locale : PHP le déduit de la valeur.

$name et $Name sont deux variables différentes (la casse compte).


Le type se calcule à la volée

PHP est typé dynamiquement : le type d’une variable dépend de sa valeur, au moment de l’exécution. Voir Introduction aux types.

Types courants : null, bool, int, float, string, array, object

Et on peut changer le type d’une même variable :

<?php
$name = 'Thibault'; // string
$name = 3;          // maintenant int

C’est volontaire. D’autres langages l’interdisent. Ici, c’est PHP.


Typer une fonction : paramètres et retour

Une variable locale ne se type pas. En revanche, dès qu’on écrit une fonction, on peut typer :

  • les paramètres (ce qu’on reçoit) ;
  • le retour (ce qu’on renvoie), avec : après les parenthèses.

Référence : Déclarations de type.

<?php
function sayHello(string $name): string
{
    return 'hello '.$name;
}

echo sayHello('Thibault');

Thibault est une string : ça passe, echo affiche hello Thibault.

On peut aussi indiquer plusieurs types (union), par exemple int|null : un entier, ou null.


PHP convertit… sauf en strict_types

Sans option particulière, PHP jongle les types. Une fonction qui attend une string accepte souvent un int : 3 devient "3". Dans la vidéo, sayHello(3) passe encore.

C’est pratique. Ce n’est pas toujours ce qu’on veut : si on a demandé une string explicitement, un entier est-il acceptable ?

Pour être strict, on place tout en haut du fichier, première instruction :

<?php
declare(strict_types=1);

function sayHello(string $name): string { return 'hello '.$name; }

echo sayHello(3);

Là, PHP refuse : on a demandé une string, on a passé un int. C’est une TypeError. Voir declare et le chapitre Typage strict des déclarations de type.

1 veut dire true. Sans cette ligne, PHP convertit ; avec, il exige le bon type.


En POO : propriétés et méthodes

Si vous faites de la programmation objet, vous pouvez aussi typer :

  • une propriété de classe (public string $name) ;
  • les paramètres et le retour d’une méthode (une méthode, c’est une fonction dans une classe).

Le typage des propriétés existe depuis PHP 7.4. Même idée que pour les fonctions : on décrit ce qui est autorisé, PHP vérifie.


Récap

Peut-on typer ?
Variable locale ($total = 20) Non
Paramètre de fonction Oui (int $a)
Retour de fonction Oui (: string ou : int|null)
Propriété de classe Oui (public string $name)

Et le fond :

  • $ devant le nom ;
  • = pour assigner ;
  • type calculé à la volée, et modifiable ;
  • declare(strict_types=1) si on veut arrêter les conversions silencieuses.

Démo vidéo


FAQ rapide (SEO & technique)

Pourquoi un dollar devant les variables PHP ?
C’est la syntaxe du langage. Sans $, ce n’est pas une variable. Voir les variables.

Peut-on typer $name = 'Thibault' ?
Non. Les variables locales n’ont pas de déclaration de type. On type les fonctions (paramètres, retour) et les propriétés de classe.

Pourquoi sayHello(3) marche parfois ?
Par défaut, PHP convertit l’int en string. Avec declare(strict_types=1) en tête de fichier, c’est une erreur.

C’est quoi un union type ?
Plusieurs types possibles, séparés par |, par exemple int|null. Voir les déclarations de type.

Le type d’une variable peut-il changer ?
Oui. $x = 'Thibault' puis $x = 3 : PHP recalcule le type. C’est le typage dynamique.


Conclusion

Variables PHP : dollar, égal, type à la volée. On ne type pas la variable elle-même, mais on peut (et c’est souvent une bonne idée) typer ce qui entre et sort des fonctions, surtout avec strict_types.

Suite de la série : PHP : les opérateurs (calculs, comparaisons et concaténation).

Étiquettes :