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(truefalse);
}
?>

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