Les variables au sein d'une classe sont appelées propriétés.
On peut également les retrouver sous d'autres dénominations tel que
champs, mais pour cette documentation
propriété sera utilisé.
Elles sont définies en utilisant un des mots-clés public
,
protected
, ou private
, suivi
optionnellement, à partir de PHP 7.4, d'une déclaration de type,
suivi d'une déclaration classique de variable.
Cette déclaration peut comprendre une initialisation, mais celle-ci doit
être une valeur constante
Référez-vous à Visibilité pour plus
d'informations sur la signification
de public
, protected
,
et private
.
Note:
Une manière alternative et non recommandé de déclarer une propriété de classe, car c'est pour maintenir la la rétrocompatibilité avec PHP 4, est d'utiliser le mot-clé
var
. La propriété sera traitée comme si elle avait été déclarée commepublic
.
Au sein des méthodes de classes, les propriétés non statiques peuvent être
appelées en utilisant la syntaxe ->
(opérateur de l'objet) :
$this->property (où property
est le
nom de la propriété). Les propriétés statiques peuvent être appelées en
utilisant la syntaxe ::
(deux doubles points) :
self::$property. Reportez-vous à la documentation sur
le mot clé statique pour plus d'informations
sur la différence entre les propriétés statiques et non statiques.
La pseudo-variable $this est disponible au sein de n'importe quelle méthode, lorsque cette méthode est appelée au sein d'un objet. $this est la valeur de l'objet appelant.
Exemple #1 Déclarations de propriétés
<?php
class SimpleClass
{
public $var1 = 'hello ' . 'world';
public $var2 = <<<EOD
hello world
EOD;
public $var3 = 1+2;
// déclaration de propriété invalide :
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
// Déclarations valides de propriétés :
public $var6 = myConstant;
public $var7 = [true, false];
public $var8 = <<<'EOD'
hello world
EOD;
}
?>
Note:
Il existe des fonctions diverses qui permettent de gérer des classes et des objets. Voir la référence sur les Fonctions Classes/Objets.
À partir de PHP 7.4.0, les définitions de propriétés peuvent inclure une
Déclarations de type,
avec l'exception du type callable
.
Exemple #2 Exemple de propriétés typées
<?php
class User
{
public int $id;
public ?string $name;
public function __construct(int $id, ?string $name)
{
$this->id = $id;
$this->name = $name;
}
}
$user = new User(1234, null);
var_dump($user->id);
var_dump($user->name);
?>
L'exemple ci-dessus va afficher :
int(1234) NULL
Les propriétés typés doivent être initialisées avant d'y accéder, sinon, une Error sera émise.
Exemple #3 Accès aux propriétés
<?php
class Shape
{
public int $numberOfSides;
public string $name;
public function setNumberOfSides(int $numberOfSides): void
{
$this->numberOfSides = $numberOfSides;
}
public function setName(string $name): void
{
$this->name = $name;
}
public function getNumberOfSides(): int
{
return $this->numberOfSides;
}
public function getName(): string
{
return $this->name;
}
}
$triangle = new Shape();
$triangle->setName("triangle");
$triangle->setNumberofSides(3);
var_dump($triangle->getName());
var_dump($triangle->getNumberOfSides());
$circle = new Shape();
$circle->setName("circle");
var_dump($circle->getName());
var_dump($circle->getNumberOfSides());
?>
L'exemple ci-dessus va afficher :
string(8) "triangle" int(3) string(6) "circle" Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be accessed before initialization