Après les requêtes HTTP, on rentre dans le langage : variables et types.
En PHP, une variable commence par un dollar, on lui assigne une valeur avec =, et le type est calculé à la volée. On peut même le changer en cours de route. C’est une spécificité de PHP : certains aiment, d’autres moins. Dans cet article, comme dans la vidéo, on voit aussi comment typer les paramètres, les retours, et (en POO) les propriétés.
Une variable, c’est $ puis un nom
Référence : Essentiel des variables.
<?php
$name = 'Thibault';
echo $name;
Trois règles à retenir :
- le
$devant le nom, toujours ; =pour associer une valeur ;- 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
| Où | 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).