La composition

Principe

La composition est le principe d'utiliser une classe dans une autre classe.

Par exemple, vos manager, utilise la composition pour manager l'objet en question.
Il existe une autre façon intéressante d'utilisation la composition.

Utilisation

Par exemple, vous avez une classe Message :
class Message
{
	private $link;

	private $id;
	private $content;
	private $id_author;
	private $date;

	public function __construct($link)
	{
		$this->link = $link;
	}
	public function getId()
	{
		return $this->id;
	}
	public function getContent()
	{
		return $this->content;
	}
	public function getDate()
	{
		return $this->date;
	}
	public function getIdAuthor()
	{
		return $this->id_author;
	}
	public function getAuthor()
	{
		$manager = new UserManager($this->link);
		$author = $manager->select($this->id_author);
		return $author;
	}
	public function setContent($content)
	{
		$this->content = $content;
	}
	public function setIdAuthor($id_author)
	{
		$this->id_author = $id_author;
	}
	public function setAuthor($author)
	{
		$this->id_author = $author->getId();
	}
	public function setDate($date)
	{
		$this->date = $date;
	}
}
Et une classe User :
class User
{
	private $link;

	private $id;
	private $login;
	private $password;
	private $email;
	private $date;

	public function __construct($link)
	{
		$this->link = $link;
	}
	public function getId()
	{
		return $this->id;
	}
	public function getLogin()
	{
		return $this->login;
	}
	public function getPassword()
	{
		return $this->password;
	}
	public function getEmail()
	{
		return $this->email;
	}
	public function getDate()
	{
		return $this->date;
	}
	public function setLogin($login)
	{
		$this->login = $login;
	}
	public function setPassword($password)
	{
		$this->password = $password;
	}
	public function setEmail($email)
	{
		$this->email = $email;
	}
	public function setDate($date)
	{
		$this->date = $date;
	}
}
Lors de votre affichage du message vous aurez quelque chose de ce genre :
<div>
	[<span class="date"><?=$message->getDate()?></span>]
	<span class="author"><?=$message->getIdAuthor()?></span> :
	<span class="content"><?=$message->getContent()?></span>
</div>
Ce qui affichera quelque chose comme :
[2015-09-02] 1 : Le contenu !

Le soucis étant que vous allez récupérer l'id de l'auteur plutôt que son login par exemple.
Alors qu'en utilisant la composition, vous pourrez faire directement :
<div>
	[<span class="date"><?=$message->getDate()?></span>]
	<span class="author"><?=$message->getAuthor()->getLogin()?></span> :
	<span class="content"><?=$message->getContent()?></span>
</div>
Ce qui donnera :
[2015-09-02] Pascal : Le contenu !