var
En PHP, le mot-clé "var" sert à déclarer des propriétés de classe. Il était courant dans les anciennes versions de PHP, remplacé depuis par "public".
Le mot-clé PHP var
var est un mot-clé hérité permettant de déclarer une propriété de classe en PHP. Il remonte à PHP 4, époque où les classes n'avaient pas de modificateurs d'accès et où chaque propriété était effectivement publique. Le PHP moderne conserve var uniquement pour la compatibilité ascendante — depuis PHP 5, c'est un synonyme exact de public.
Cette page explique ce que fait var, comment il se compare aux modificateurs public / private / protected qui l'ont remplacé, et pourquoi vous ne devriez pas l'utiliser dans du nouveau code.
var est identique à public
Le point essentiel à retenir : une propriété déclarée avec var se comporte de manière identique à une propriété déclarée avec public. Les deux sont lisibles et modifiables depuis n'importe où — à l'intérieur de la classe, dans les sous-classes et depuis l'extérieur.
<?php
class User {
var $name = "Guest"; // legacy syntax
}
class Account {
public $name = "Guest"; // modern equivalent — exactly the same behavior
}
$a = new User();
$b = new Account();
echo $a->name . "\n"; // Guest
echo $b->name . "\n"; // Guest
$a->name = "Alice"; // both properties are publicly writable
$b->name = "Bob";
echo $a->name . "\n"; // Alice
echo $b->name . "\n"; // BobComme ils sont équivalents, mélanger var et public dans la même classe est légal mais prête à confusion — choisissez public et restez cohérent.
Syntaxe
Une propriété var peut être déclarée avec ou sans valeur par défaut, et vous pouvez en lister plusieurs sur une même ligne :
<?php
class Config {
var $host; // no default → null
var $port = 8080; // with a default value
var $debug = false, $cache = true; // multiple at once
}
$c = new Config();
var_dump($c->host); // NULL
echo $c->port . "\n"; // 8080
var_dump($c->debug); // bool(false)Une valeur par défaut doit être une expression constante (un littéral, une constante ou un tableau de ceux-ci) — elle ne peut pas être le résultat d'un appel de fonction ou d'un autre objet.
Pourquoi var a été remplacé
PHP 5 a introduit une vraie visibilité avec trois modificateurs d'accès, et var ne pouvait tout simplement pas exprimer la différence entre eux :
| Modificateur | Accessible depuis |
|---|---|
public | partout (identique à var) |
protected | la classe elle-même et ses sous-classes |
private | uniquement la classe déclarante |
<?php
class BankAccount {
public $owner; // readable everywhere
protected $type; // class + subclasses
private $balance = 0; // this class only
public function deposit(int $amount): void {
$this->balance += $amount; // allowed: same class
}
public function getBalance(): int {
return $this->balance;
}
}
$acc = new BankAccount();
$acc->owner = "Alice"; // OK — public
$acc->deposit(100);
echo $acc->getBalance(); // 100
// echo $acc->balance; // Fatal error: Cannot access private propertyEncapsuler $balance en private oblige toutes les modifications à passer par deposit(), ce qui permet à la classe de contrôler son propre état. C'est exactement cette garantie que var ne peut pas offrir, ce qui explique pourquoi les modificateurs explicites sont devenus la norme.
Points d'attention
- Ce n'est pas le
varde JavaScript. Levarde PHP ne sert qu'à déclarer une propriété de classe. Les variables locales à l'intérieur des fonctions s'écrivent$x = 1;sans mot-clé. - Ne le combinez pas avec un modificateur.
var public $x;est une erreur de syntaxe —varest le modificateur. - Les propriétés typées ne l'utilisent pas. Depuis PHP 7.4, on écrit
public int $port;. Il n'existe pas devar int $port;.
Bonnes pratiques
Évitez var dans le nouveau code. Déclarez toujours la visibilité explicitement afin que le lecteur connaisse immédiatement le niveau d'accès prévu :
- Privilégiez la visibilité la plus restrictive qui fonctionne encore — généralement
private, en exposant les données via des méthodes. - Utilisez
protectedlorsque les sous-classes ont légitimement besoin d'un accès. - Réservez
publicaux éléments qui font véritablement partie de l'interface externe de l'objet.
Sujets connexes
- Modificateurs d'accès PHP —
public,privateetprotecteden détail. - Mots-clés PHP
publicet PHPprivate. - Classes et objets PHP et le mot-clé
class. - Constructeur PHP — initialisation des propriétés lors de la création d'un objet.
Conclusion
var est un héritage de PHP 4 qui ne signifie aujourd'hui rien de plus que public. Il fonctionne toujours, mais il masque vos intentions. En PHP moderne, déclarez chaque propriété avec public, protected ou private afin que les règles d'accès de votre code soient explicites et auto-documentées.