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

LoadingChargement en cours