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 !