Syntaxe de base
class
Une définition de classe basique commence par le mot-clé class, suivi du nom de la classe. Suit une paire d'accolades contenant la définition des propriétés et des méthodes appartenant à la classe.
Le nom de la classe peut être quelconque à condition que ce ne soit pas un mot réservé en PHP. Un nom de classe valide commence par une lettre ou un underscore, suivi de n'importe quel nombre de chiffres, ou de lettres, ou d'underscores. Si on devait l'exprimer sous forme d'une expression rationnelle, il s'agirait de [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
Une classe peut contenir ses propres constantes, variables (appelées "propriétés" ou "attributs"), et fonctions (appelées "méthodes").
Exemple #1 Définition typique d'une classe
<?php class SimpleClass { // déclaration d'une propriété public $var = 'une valeur par défaut'; // déclaration des méthodes public function displayVar() { echo $this->var; } } ?>
La pseudo-variable $this est disponible lorsqu'une méthode est appelée depuis un contexte objet. $this est une référence à l'objet appelant (habituellement, l'objet auquel la méthode appartient, mais ce peut être un autre objet si la méthode est appelée de manière statique depuis le contexte d'un autre objet).
Exemple #2 Quelques exemples de la pseudo-variable $this
<?php
class A
{
function toto()
{
if (isset($this)) {
echo '$this est définie (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this n'est pas définie.\n";
}
}
}
class B
{
function titi()
{
// Note: la ligne suivante émet une erreur si E_STRICT est activé.
A::toto();
}
}
$a = new A();
$a->toto();
// Note: la ligne suivante émet une erreur si E_STRICT est activé.
A::toto();
$b = new B();
$b->titi();
// Note: la ligne suivante émet une erreur si E_STRICT est activé.
B::titi();
?>
<?php $instance = new SimpleClass(); // Ceci peut également être réalisé avec une variable : $className = 'Foo'; $instance = new $className(); // Foo() ?>
Dans le contexte de la classe, il est possible de créer un nouvel objet avec new self et new parent.
Lors de l'assignation d'une instance déjà créée d'une classe à une variable, la nouvelle variable accédera à la même instance que l'objet qui a été assigné. Ce comportement est le même lors du passage d'une instance à une fonction. Une copie d'un objet déjà créé peut être effectuée par clonage.
Exemple #4 Assignation d'un objet
<?php $instance = new SimpleClass(); $assigned = $instance; $reference =& $instance; $instance->var = '$assigned aura cette valeur'; $instance = null; // $instance et $reference deviennent null var_dump($instance); var_dump($reference); var_dump($assigned); ?>
<?php class Test { static public function getNew() { return new static; } } class Child extends Test {} $obj1 = new Test(); $obj2 = new $obj1; var_dump($obj1 !== $obj2); $obj3 = Test::getNew(); var_dump($obj3 instanceof Test); $obj4 = Child::getNew(); var_dump($obj4 instanceof Child); ?>
<?php class ExtendClass extends SimpleClass { // Redéfinition de la méthode parente function displayVar() { echo "Classe étendue\n"; parent::displayVar(); } } $extended = new ExtendClass(); $extended->displayVar(); ?>
<?php namespace NS { class ClassName { } echo ClassName::class; } ?>
L'exemple ci-dessus va afficher :
NS\ClassName