Non ce n'est pas obligatoire en soit, c'est juste une bonne pratique que je te conseil d'utiliser. Un projet parfait sur ce point et un projet dans lequel toute les classes on comme parent une interface :
interface SuperClass{}
class Parent implements SuperClass {}
class Child extends Parent {}
class BadChild {} // dans cet exemple seul celle-ci n'est pas bonne.
Class GoodChild implements SuperClass {}
Attention, je précise encore un "projet parfait" hors dans a réalité, ça reste pas toujours évident voir faisable d'y parvenir, le tout est d'essayer de tendre vers ça. C'est quand même ça la base de la POO.
Voici un exemple de à quoi ça pourrait ressembler.
<?php
class Serie extends Model {
protected $_idExercice;
public function getExercise()
{
$this->manager->get($this->_idExercice);
}
}
abstract class Model
{
protected $manager;
public function __construct(ManagerInterface $manager) {
$this->manager = $manager;
}
}
class ExerciseManager extends ManagerAbstract
{
//[...]
}
abstract class ManagerAbstract implements ManagerInterface
{
protected $db;
public function __construct(\PDO $db)
{
$this->db = $db;
}
public function get($params) {
//[...]
}
}
interface ManagerInterface {
public function get($params);
}
/**
* Section dependency injection
**/
$container->set(ExerciseManager::class,function($container) {
return new ExerciseManager($container->get(\PDO::class));
});
$container->set(\PDO::class,function($container) {
return new PDO('bla','bla','bla');
});
$container->set(Serie::class,function($container) {
return $container->get(\PDO::class);
});