Syntaxe de base
class
Chaque d�finition de classe commence par le mot-cl� class, suivi par le nom de la classe, qui peut �tre quelconque � condition que ce ne soit pas un mot r�serv� en PHP. Suivent une paire de parenth�ses contenant la d�finition des membres et des m�thodes. Une pseudo-variable $this est disponible lorsqu'une m�thode est appel�e depuis un contexte objet. $this est une r�f�rence � l'objet appel� (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). Ce comportement est illustr� dans l'exemple suivant :
Exemple #1 La variable $this en programmation objet
<?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()
{
A::toto();
}
}
$a = new A();
$a->toto();
A::toto();
$b = new B();
$b->titi();
B::titi();
?>
L'exemple ci-dessus va afficher :
$this est d�finie (a) $this n'est pas d�finie. $this est d�finie (b) $this n'est pas d�finie.
Exemple #2 D�finition simple d'une classe
<?php
class SimpleClass
{
// d�claration d'un membre
public $var = 'une valeur par d�faut';
// d�claration de la m�thode
public function displayVar() {
echo $this->var;
}
}
?>
La valeur par d�faut doit �tre une expression, et non (par exemple) une variable, un membre d'une classe ou un appel � une fonction.
Exemple #3 Valeur par d�faut des membres d'une classe
<?php
class SimpleClass
{
// D�clarations de membres non valides :
public $var1 = 'hello '.'world';
public $var2 = <<<EOD
Bonjour le monde !
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
// D�clarations de membres valides :
public $var6 = myConstant;
public $var7 = self::classConstant;
public $var8 = array(true, false);
}
?>
Note: Il y a plusieurs fonctions utiles pour g�rer les classes et les objets. Vous devriez regarder du c�t� des fonctions d'objets et de classes.
Contrairement � heredocs, nowdocs peut �tre utilis� dans n'importe quel contexte de donn�es statiques.
Exemple #4 Exemple avec des donn�es statiques
<?php
class foo {
// Depuis PHP 5.3.0
public $bar = <<<'EOT'
bar
EOT;
}
?>
Note: Le support de Nowdoc a �t� ajout� depuis PHP 5.3.0.
Le mot-cl� new
Pour cr�er une instance d'une classe, un nouvel objet doit �tre cr�� et assign� � une variable. Un objet doit toujours �tre assign� lors de la cr�ation d'un nouvel objet � moins qu'il ait un constructeur d�fini qui lance une exception en cas d'erreur. Les classes doivent �tre d�finies avant l'instanciation (dans certains cas, c'est imp�ratif).
Exemple #5 Cr�ation d'une instance
<?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 de l'objet assign�. Ce comportement est le m�me que lors du passage d'une instance � une fonction. Une copie d'un objet d�j� cr�� peut �tre effectu�e par clonage.
Exemple #6 Assignation d'un objet
<?php
$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);
?>
L'exemple ci-dessus va afficher :
NULL NULL object(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned aura cette valeur" }
Le mot-cl� extends
Une classe peut h�riter des m�thodes et des membres d'une autre classe en utilisant le mot-cl� extends dans la d�claration. Il n'est pas possible d'�tendre de multiples classes : une classe peut uniquement h�riter d'une seule classe de base.
Les m�thodes et membres h�rit�s peuvent �tre surcharg�s, � moins que la classe parente ait d�fini une m�thode comme final. Pour surcharger, il suffit de d�clarer � nouveau la m�thode avec le m�me nom que celui d�fini dans la classe parente. Il est possible d'acc�der � une m�thode ou un membre statique avec l'op�rateur parent::
Exemple #7 H�ritage d'une classe simple
<?php
class ExtendClass extends SimpleClass
{
// Red�finition de la m�thode parent
function displayVar()
{
echo "Classe �tendue\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>
L'exemple ci-dessus va afficher :
Classe �tendue une valeur par d�faut