W3docs

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";   // Bob

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

ModificateurAccessible depuis
publicpartout (identique à var)
protectedla classe elle-même et ses sous-classes
privateuniquement 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 property

Encapsuler $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 var de JavaScript. Le var de 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 — var est 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 de var 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 protected lorsque les sous-classes ont légitimement besoin d'un accès.
  • Réservez public aux éléments qui font véritablement partie de l'interface externe de l'objet.

Sujets connexes

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.

Pratique

Pratique
En PHP moderne, le mot-clé 'var' utilisé pour déclarer une propriété de classe est équivalent à quel modificateur d'accès ?
En PHP moderne, le mot-clé 'var' utilisé pour déclarer une propriété de classe est équivalent à quel modificateur d'accès ?
Was this page helpful?