Propriétés
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 comme public
.
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 depuis un objet.
$this est la valeur de l'objet appelant (en général l'objet
auquel la méthode appartient, mais il peut s'agir d'un autre objet si la méthode
est appelée de façon statique depuis
le contexte d'un second objet).
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 qui permettent de gérer des classes et des objets.
Vous voudrez peut-être jeter un coup d'œil à Fonctions
Classes/Objets.
Déclarations des types
À 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 :
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